画面に関する処理などはメインスレッドで実施する必要があります。
処理によっては、メインスレッドで実施されているかどうか判定が必要となります。
メインスレッドかどうかの判定には
Application.Current.Dispatcher.CheckAccess()
を使用します。
CheckAccess()はメインスレッドの場合にTrueを返します。
このプログラムの実行結果は
メインスレッド [True]
別スレッド [False]
処理によっては、メインスレッドで実施されているかどうか判定が必要となります。
メインスレッドかどうかの判定には
Application.Current.Dispatcher.CheckAccess()
を使用します。
CheckAccess()はメインスレッドの場合にTrueを返します。
using System.Windows;
private void Execute()
{
// メインスレッドから実行
bool checkAccessA = Application.Current.Dispatcher.CheckAccess();
Debug.WriteLine("メインスレッド [" + checkAccessA + "]");
// タスク内で実行
Task.Run(() =>
{
bool checkAccessB = Application.Current.Dispatcher.CheckAccess();
Debug.WriteLine("別スレッド [" + checkAccessB + "]");
});
}
このプログラムの実行結果は
メインスレッド [True]
別スレッド [False]
のようになります。
WPFでLivetを使用しているなら、
DispatcherHelper.UIDispatcherを使用できるので、あまり出番はないかもしれませんが・・・