2013-06-29 114 views
1

有沒有辦法對WP7-WP8中的自定義方法進行異步調用?

在Windows窗體應用程序,我只想做到這一點:自定義異步方法

private void btnStart_Click(object sender, EventArgs e) 
{ 
    MyMethod(); 
} 

private async void MyMethod() 
{ 
    await System.Threading.Tasks.Task.Run(() => Thread.Sleep(5000)); 
} 

然而,這似乎是System.Threading.Tasks命名空間不WP應用程序的支持。

那麼我應該怎麼做,如果我希望在我的WP7-WP8應用程序中採取類似行動?

回答

3

您可以安裝Microsoft.Bcl.Async以支持WP7.5。如果您需要WP7.0支持,您最好的選擇是BackgroundWorker

P.S.你的WinForms例如將更好的寫法如下:

private async void btnStart_Click(object sender, EventArgs e) 
{ 
    await Task.Run(() => MyMethod()); 
} 

private void MyMethod() 
{ 
    Thread.Sleep(5000); 
} 

遵循這些最佳做法:

  1. 避免async void
  2. 請勿在通用庫方法中使用Task.Run
+0

謝謝你,但我仍然有一個問題。 我爲TextBox.TextChanged事件編寫了一個異步事件處理程序,但是當我嘗試執行此操作時,出現錯誤提示「無效的跨線程調用」: await TaskEx.Run((=> MyMethod() ); 或 await Task.Factory.StartNew(()=> MyMethod()); 我怎麼解決這個問題? – anfri

+0

任何UI更新都需要在UI線程上完成,因此它們不能在對「Task.Run」的調用中進行。您需要將「MyMethod」分成「背景」部分和「UI」部分。 –