2012-03-02 4 views
0

タブコントロールとタブアイテムを持つビュー(ユーザーコントロール)があります。アプリケーションが終了すると、すべてのタブ項目を削除したいので、RemoveAllTabItems関数を呼び出すファイナライザを作成しました。しかし、タブコントロール項目にアクセスしようとするとエラーが表示されます。「呼び出し元のスレッドは、別のスレッドが所有しているため、このオブジェクトにアクセスできません。私は、タブコントロールのディスパッチャを使用してエラーを修正しようとしましたが、これを行うことによってremove関数は呼び出されません。説明のためWPF - UIの確定とUI

サンプルコード:

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

ディスパッチャを使用せず、直接RemoveAllTabItems関数を呼び出します。

+0

上記のように、別のスレッドからエラーが発生します。そのため、ディスパッチャを使用して関数を呼び出そうとしています。 – sysboard

関連する問題