3

我继承了一个BackgroundWorker并覆盖了 OnDoWork:

protected override void OnDoWork(DoWorkEventArgs e)
{
    WorkerEndedEvent.Reset();
    base.OnDoWork(e);
}

我的问题是,这将从哪个线程调用?是否保证在我的调用期间被调用,RunWorkerAsync()或者可以在之后调用它(即从工作线程)?

4

1 回答 1

4

它将由工作线程调用,并且不保证在调用RunWorkerAsync.

RunWorkerAsync的文档指出:

RunWorkerAsync 方法提交请求以启动异步运行的操作。当请求得到服务时,会引发 DoWork 事件,进而开始执行您的后台操作。

所以RunWorkerAsync只提交一个开始操作的请求——这将引发DoWork事件。它不保证什么时候DoWork会被调用。

它也被记录为使用单独的线程来完成它的工作:

在单独的线程上执行操作。

很明显,DoWork 是在与被调用的线程不同的线程RunWorkerAsync上调用的。

于 2013-09-25T11:16:52.487 回答