3

GUI スレッドをフリーズせずに、時間のかかるアクションを実行しようとしています。メソッドは、ViewModelのUpdateSomethingコンストラクターで 1 回、ボタン クリック (RelayCommand) で 1 回、2 つの場所で呼び出されます。メソッドが RelayCommand 経由で呼び出された場合、メソッドは WorkerThread で実行されますが、コンストラクターからメソッド呼び出しが行われた場合は MainThread (GUI) で実行されます。

この奇妙な動作の原因は何ですか? IntelliTrace を使用して数回再確認します。

これは問題の方法です:

private async void UpdateSomething()
{
    var item = await Task.Factory.StartNew(() =>this.DoSomething("I should run async"));
    this.TestItem = item;
}

私はWPFと.Net 4.5を使用しています

4

3 に答える 3