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));
}
위에서 언급했듯이 다른 스레드에서 오류가 발생하므로 디스패처를 사용하여 함수를 호출하려고합니다. – sysboard