等待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..
}
如果您必须在没有异步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响应。