2014-03-05 61 views
1

我是C#中的多線程應用程序的新手。當我正在處理它時,我已經瞭解了關於應用程序UI的UI線程。現在我對使用UI線程和不應該做什麼有點困惑。用戶界面線程的注意事項

Task.Factory.StartNew(() => 
     { 
      try 
      { 
       device.Capture(); // capturing data from a I/O device 
      } 
      catch (Exception ex) 
      { 
       this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() => 
       { 
        show_error(ex.Message); 

       })); 
      } 
     }); 

從代碼示例中的每個I/O或DB訪問或龍亞軍任務應該由一個工作線程來完成和用戶界面應該由UI線程進行更新。在這個例子的上面,我想知道UI線程能夠有效地完成什麼,以及哪些不是?

更新:

確實讓我給使用C#定時器DispatcherTimer的一個例子。 Timer在不同的線程上運行,DispatcherTimer使用UI線程。通過這個DispatcherTimer可能會在UI線程繁忙時掛起。那麼這個DispatcherTimer可以在UI線程上運行嗎?

+0

*一般來說*,如果涉及比快速計算更或修改UI控件,然後執行[我想從外面張貼此我沒編譯上面的代碼]它在工作者線程上。您可以使用分派器或[任務](http://msdn.microsoft.com/zh-cn/library/dd460717(v = vs.110).aspx)來完成此操作。也就是說,這個問題很可能會引出主要基於意見的答案。 –

+0

是否有任何相關文章或社區wiki可用於此問題? – Prasanth

回答

1

如果你的目標是4.5嘗試開始使用異步和等待,這使得更容易。尋找MSDN的幫助。

private async Button_Click(object sender, EventArgs args) 
{ 

    var t= await Task<string>.Run(()=> device.Capture()); //Assuming your task will return some string 
label1.Text = t.Result; 


} 

+0

'label1.Text = t.Result;'應該是'label1.Text = t'因爲await只會返回結果 –

+0

感謝Kris!但我沒有要求任何代碼示例。如果有任何可能性只是發表您的評論 – Prasanth