2013-10-17 29 views
1

我有一个托管WCF服务的Winforms应用程序。在我的应用程序中使用另一个线程

里面我Connect按钮点击事件,连接是通过BackgroundWorker为了打开我的UI,而这仍然连接超级过程响应(1 - 2秒)和BackgroundWorker_RunWorkerCompleted事件之后去我的其他类,做我的东西。

最近我加几Thread.Sleep在调试时,请注意,不冻结我的UI所以以后我搜索我发现,也许是因为BackgroundWorker线程(是吗?)

在我的应用我有表单类和包含几个事件的另一个类,表格类订阅这些事件,并以这种方式更新我的UI:

 this.Invoke((MethodInvoker)delegate 
     { 
      // Update UI 
     }); 

所以我的问题是:这是确定以使用另一个线程以这种方式和使用this.Invoke

或者我需要以另一种方式做到吗?

+0

即使寿你的做法是正确的,如果你想知道一个不同的方式来处理用户界面更新,而无需使用调用我会推荐阅读有关的SynchronizationContext。 http://www.codeproject.com/Articles/31971/Understanding-SynchronizationContext-Part-I –

回答

2

是的,这是好的,它的背景工作者是在async出现之前发明的。

我建议使用async

+0

我个人不建议异步,但没关系。我有一种模式,比我可能应该提取到图书馆中的异步行为的结果稍好。 – Joshua

+0

是的,如果你想把它放在codeproject或其他东西上,那将是很好看的。一直在寻找更多的东西。 – ohmusama

相关问题