WPF - Finalize和UI线程

时间:2012-03-02 09:34:59

标签: wpf dispatcher finalizer

我有一个视图(用户控件),其中包含选项卡控件和选项卡项。当应用程序关闭时,我想删除所有标签项,为此我创建了一个调用RemoveAllTabItems函数的终结器。但是,我在尝试访问选项卡控件时遇到错误:“调用线程无法访问此对象,因为另一个线程拥有它。”我试图通过使用选项卡控件调度程序来修复错误,但是这样做不会调用remove函数。

示例代码:

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 :(得分:0)

直接调用RemoveAllTabItems函数,而不使用调度程序。