等待UI控件的最佳方法是什么?

时间:2012-04-04 08:01:33

标签: c# backgroundworker wait

我有一个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..
}

1 个答案:

答案 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响应。