我继承了一个BackgroundWorker
并覆盖了 OnDoWork:
protected override void OnDoWork(DoWorkEventArgs e)
{
WorkerEndedEvent.Reset();
base.OnDoWork(e);
}
我的问题是,这将从哪个线程调用?是否保证在我的调用期间被调用,RunWorkerAsync()
或者可以在之后调用它(即从工作线程)?
我继承了一个BackgroundWorker
并覆盖了 OnDoWork:
protected override void OnDoWork(DoWorkEventArgs e)
{
WorkerEndedEvent.Reset();
base.OnDoWork(e);
}
我的问题是,这将从哪个线程调用?是否保证在我的调用期间被调用,RunWorkerAsync()
或者可以在之后调用它(即从工作线程)?
它将由工作线程调用,并且不保证在调用RunWorkerAsync
.
RunWorkerAsync的文档指出:
RunWorkerAsync 方法提交请求以启动异步运行的操作。当请求得到服务时,会引发 DoWork 事件,进而开始执行您的后台操作。
所以RunWorkerAsync
只提交一个开始操作的请求——这将引发DoWork
事件。它不保证什么时候DoWork
会被调用。
它也被记录为使用单独的线程来完成它的工作:
在单独的线程上执行操作。
很明显,DoWork 是在与被调用的线程不同的线程RunWorkerAsync
上调用的。