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