等待UI控件的最佳方式

本文关键字:最佳 方式 控件 UI 等待 | 更新日期: 2023-09-27 18:29:53

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

等待UI控件的最佳方式

如果您必须在没有异步CTP的情况下使用.NET 3.5或.NET 4,我认为您将无法避免拆分代码(除非您想在代码中使用DoEvents,这绝对是不推荐的)。

另一方面,异步扩展(.NET 4的CTP或.NET 4.5中包含的版本)允许您执行以下操作:

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

然后,编译器自动将您的"后代码片段"放入一个单独的代码块(延续)中,ShowMessage发出完成信号后立即运行该代码块。同时,控制返回到Windows消息循环,使程序的UI响应。