UI要素への参照がないときにUIスレッドのDispatcher
を取得する方法はありますか?
静的アプリケーションインスタンスからUIディスパッチャーを取得できます:Application.Current.Dispatcher
Application.Current
は、シャットダウンシーケンス中にクリアできるため、最初はnullです。
以下は、たまたま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()
を呼び出して_System.Windows.Application.Current
_を設定する方法)は、新しいWPFウィンドウを開いてから閉じるたびに問題を引き起こしました。これは_System.Windows.Application.Current
_をnullにしただけでなく、InitializeComponents()
メソッドとして新しいウィンドウを開くことができなくなりました。
System.InvalidOperationException:「アプリケーションオブジェクトがシャットダウンされています。」
これまでのところ、新しいソリューションはこれらの副作用なしで機能しています。