BackgroundWorker的OnDoWork是从调用线程还是工作线程调用的?

时间:2013-09-25 11:14:56

标签: c# .net multithreading winforms backgroundworker

我继承了BackgroundWorker并覆盖了OnDoWork:

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

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

1 个答案:

答案 0 :(得分:3)

它将由工作线程调用,并且不能保证在调用RunWorkerAsync期间被调用。

RunWorkerAsync州的文档:

  

RunWorkerAsync方法提交启动操作的请求   异步运行。在处理请求时,DoWork事件   被引发,然后开始执行你的背景   操作

因此RunWorkerAsync仅提交启动操作的请求 - 这将引发DoWork事件。它不能保证何时调用DoWork

使用单独的线程进行工作也是documented

  

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

很明显,在调用RunWorkerAsync之外的其他线程上调用DoWork。