2012-04-04 66 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响应。

相关问题