58

DispatcherUI要素への参照がないときにUIスレッドを取得する方法はありますか?

4

2 に答える 2

104

静的アプリケーションインスタンスからUIディスパッチャーを取得できます。Application.Current.Dispatcher

Application.Currentnullはシャットダウンシーケンス中にクリアされる可能性があるため、最初にnullをチェックすることをお勧めします。

于 2010-04-19T21:54:36.567 に答える
7

以下は、WPF(私の場合はEsriのArcmap.exe)も使用しているWinFormsアプリケーションで使用する場合に非常にうまく機能します。

private System.Windows.Threading.Dispatcher Dispatcher { get; set; }

// I put this in my view model constructor as it MUST be called from UI thread
Dispatcher = System.Windows.Threading.Dispatcher.CurrentDispatcher;

new System.Windows.Application()もう1つの方法( populateの呼び出しをSystem.Windows.Application.Current含む)では、新しいWPFウィンドウを開いてから閉じるたびに問題が発生しました。これが無効になっただけでなく、メソッドSystem.Windows.Application.Currentとして新しいウィンドウを開くことができなくなり、すべて失敗しました。InitializeComponents()

System.InvalidOperationException:'アプリケーションオブジェクトがシャットダウンされています。'

これまでのところ、新しいソリューションはこれらの副作用なしに機能しています。

于 2018-12-10T22:06:53.807 に答える