2012-04-04 69 views
1

我有一個用戶控件,在這個用戶控件上正在逐漸出現一條消息,幾秒鐘後它又會消失。該控件使用backgroundWorker。它工作正常。不過,我要補充的過載負責表示作爲消息的方法:等待UI控件的最佳方式是什麼?

ShowMessage(string message, bool waitToHide) { .. } 

現在,我需要知道什麼是最好的方法,使調用線程(UI線程)等待上面的方法是。


我試圖引發的事件,通知調用範圍的內部BackgroundWorker的完成,但由於這種方法已在主應用程序經常使用的,我必須打破許多統一範圍爲一些零散的。

{ 
    // before code snippet.. 
    messageDisplayer1.ShowMessage("test", true); 
    // after code snippet.. 
} 

會變成:

{ 
    // before.. 
    messageDisplayer1.ShowMessage("test", true); 
} 

void messageDisplayer1_Done() 
{ 
    // after.. 
} 

回答

3

如果你堅持使用.NET 3.5或.NET 4未經異步CTP,我不認爲你將能夠避免分裂代碼(除非你想用DoEvents亂丟你的代碼,這肯定是不推薦的)。

在另一方面,async extensions(無論是CTP的.NET 4的版本都包含在.NET 4.5)讓你做這樣的事情:

{ 
    // before code snippet.. 
    await messageDisplayer1.ShowMessage("test", true); 
    // after code snippet.. 
} 

那麼編譯器自動你的「後面的代碼片段」分成一個單獨的代碼塊(延續),ShowMessage一旦完成信號就立即運行。與此同時,控制返回到Windows消息循環,從而使程序的UI響應。

相關問題