2013-10-17 35 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

相關問題