Task
次のように完了するとイベントを発生させる非同期実行があります。
task.ContinueWith(() => {
if (MyEvent != null)
MyEvent(this, EventArgs.Empty);
}
次に、イベントハンドラーはWPFコントロールのインスタンスを作成する必要があります。しかし、そうしようとすると、例外が発生しますThe calling thread must be STA, because many UI components require this
。メソッドを呼び出すと、クラスコンストラクタで例外が発生しますInitializeComponent()
。
私の知る限り、通常、別々のスレッドからWPFコントロールにアクセスすることは、を使用して処理されDispatcher.Invoke
、それは常に私のために機能したので、私はそれを試しました:
Dispatcher.Invoke(new Action(() =>
{
InitializeComponent();
}));
しかし、その場合、例外が発生し続けます。別のスレッドからWPFコントロールのインスタンスを作成するにはどうすればよいですか?
または、完了イベントをメインUIスレッドにマーシャリングする方が良いアプローチかもしれません。はいの場合、どうすればそれを行うことができますか?