Dispatcher
UI要素への参照がないときにUIスレッドを取得する方法はありますか?
2 に答える
静的アプリケーションインスタンスからUIディスパッチャーを取得できます。Application.Current.Dispatcher
Application.Current
nullはシャットダウンシーケンス中にクリアされる可能性があるため、最初に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()
もう1つの方法( populateの呼び出しをSystem.Windows.Application.Current
含む)では、新しいWPFウィンドウを開いてから閉じるたびに問題が発生しました。これが無効になっただけでなく、メソッドSystem.Windows.Application.Current
として新しいウィンドウを開くことができなくなり、すべて失敗しました。InitializeComponents()
System.InvalidOperationException:'アプリケーションオブジェクトがシャットダウンされています。'
これまでのところ、新しいソリューションはこれらの副作用なしに機能しています。