我試圖在不凍結GUI線程的情況下執行一些耗時的操作。 UpdateSomething
方法在我的ViewModel的構造函數中一次調用兩次,並且一次單擊按鈕(RelayCommand)。如果方法是通過RelayCommand調用的,則該方法在WorkerThread中執行,但在方法調用來自構造函數時在MainThread(GUI)中運行。AsyncAwait會導致意想不到的方法行爲,如果從構造函數中調用方法,則會在錯誤的線程中運行
這是什麼原因導致奇怪行爲?我通過IntelliTrace進行了幾次檢查。
這是有問題的方法:
private async void UpdateSomething()
{
var item = await Task.Factory.StartNew(() =>this.DoSomething("I should run async"));
this.TestItem = item;
}
我使用WPF和.NET 4.5
能否請您解釋與您添加解決方案的答案?這可能對其他人也有幫助:) –
用戶@ Rene147回答了這個問題,我將他的答案標記爲正確答案。不幸的是,由於某些原因我不知道他刪除了他的答案。 – Joel
您應該閱讀以下內容:http://blogs.msdn.com/b/pfxteam/archive/2011/10/24/10229468.aspx –