Blo*_*ard 4 c# multithreading backgroundworker
假设我正在向用户显示一个表单,并使用BackgroundWorker在幕后进行一些工作.
当用户单击"确定"时,在BackgroundWorker完成之前,我无法继续.如果用户单击"确定"时尚未完成,我想显示WaitCursor,直到它有,然后继续.
实现这个的最佳方法是什么?
我知道我可以使用一个普通的老线程,然后做Thread.Join,但我喜欢BackgroundWorker.
可以做得很好吗?
理想情况下,您应该禁用表单上的所有相关控件,然后在BackgroundWorker完成时重新启用它们.这样你就不会得到一个锁定的UI - 你可以有一个取消按钮等.
如果你想要实际阻塞直到它完成,你可以同步运行任务开始.
您可以使用此代码,而不是BW
var resetEvent = new ManualResetEvent(false);
ThreadPool.QueueUserWorkItem(state =>
{
Thread.Sleep(5000);//LongRunning task, async call
resetEvent.Set();
});
resetEvent.WaitOne();// blocking call, when user clicks OK
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4336 次 |
| 最近记录: |