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を使用しています