我有一个UserControl,消息逐渐出现,几秒后它会再次消失。此控件使用backgroundWorker。它可以正常工作。但是我应该为方法添加一个重载,负责将消息显示为:
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..
}
答案 0 :(得分:3)
如果你必须坚持使用没有异步CTP的.NET 3.5或.NET 4,我认为你不能避免拆分代码(除非你想用DoEvents乱丢你的代码,绝对不推荐)。
另一方面,async extensions(.NET 4的CTP或.NET 4.5中包含的版本)允许您执行以下操作:
{
// before code snippet..
await messageDisplayer1.ShowMessage("test", true);
// after code snippet..
}
然后编译器自动将您的“后代码片段”放入一个单独的代码块( continuation ),该代码块在ShowMessage发出完成信号后立即运行。同时,控制权返回到Windows消息循环,使程序的UI响应。