2012-03-02 3 views
0

탭 컨트롤과 탭 항목이있는 뷰 (사용자 정의 컨트롤)가 있습니다. 응용 프로그램이 닫히면 모든 탭 항목을 제거하려면이 RemoveAllTabItems 함수를 호출하는 종료자를 만들었습니다. 그러나 탭 컨트롤 항목에 액세스하려고하면 오류가 발생합니다. "다른 스레드가 소유하고 있기 때문에 호출하는 스레드는이 개체에 액세스 할 수 없습니다." 탭 컨트롤 디스패처를 사용하여 오류를 해결하려고했지만 제거 기능이 호출되지 않습니다. 그림WPF - UI 마무리 및 UI 스레드

샘플 코드 : RemoveAllTabItems는 디스패처를 사용하지 않고, 직접 작동

private void RemoveAllTabItems() 
{ 
    IEnumerable<TabItem> tabs = this.myTabControl.GetTabItems(); 
    foreach (TabItem tab in tabs) 
      TryClose(tab); 
} 

~MyClass() 
{ 
    this.myTabControl.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(RemoveAllTabItems)); 
    // Already tried these: 
    // this.myTabControl.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(RemoveAllTabItems)); 
    // this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(RemoveAllTabItems)); 
} 

답변

0

전화.

+0

위에서 언급했듯이 다른 스레드에서 오류가 발생하므로 디스패처를 사용하여 함수를 호출하려고합니다. – sysboard