2014-03-05 26 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