WPF - Завершить и поток пользовательского интерфейса - PullRequest
0 голосов
/ 02 марта 2012

У меня есть представление (пользовательский элемент управления), в котором есть элемент управления вкладками и элементы вкладок.Когда приложение закрывается, я хочу удалить все элементы вкладки, и для этого я создал финализатор, который вызывает функцию 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));
}

1 Ответ

0 голосов
/ 02 марта 2012

Вызовите функцию RemoveAllTabItems напрямую, без использования диспетчера.

...