我怎么"Thread.Join"一个BackgroundWorker?

Blo*_*ard 4 c# multithreading backgroundworker

假设我正在向用户显示一个表单,并使用BackgroundWorker在幕后进行一些工作.

当用户单击"确定"时,在BackgroundWorker完成之前,我无法继续.如果用户单击"确定"时尚未完成,我想显示WaitCursor,直到它有,然后继续.

实现这个的最佳方法是什么?

我知道我可以使用一个普通的老线程,然后做Thread.Join,但我喜欢BackgroundWorker.

可以做得很好吗?

Jon*_*eet 8

理想情况下,您应该禁用表单上的所有相关控件,然后在BackgroundWorker完成时重新启用它们.这样你就不会得到一个锁定的UI - 你可以有一个取消按钮等.

如果你想要实际阻塞直到它完成,你可以同步运行任务开始.


Ser*_*oda 8

您可以使用此代码,而不是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)