我继承了BackgroundWorker
并覆盖了OnDoWork:
protected override void OnDoWork(DoWorkEventArgs e)
{
WorkerEndedEvent.Reset();
base.OnDoWork(e);
}
我的问题是,将从哪个线程调用?是否保证在我调用RunWorkerAsync()
期间调用它,或者可以在之后调用它(即从工作线程调用)?
答案 0 :(得分:3)
它将由工作线程调用,并且不能保证在调用RunWorkerAsync
期间被调用。
RunWorkerAsync州的文档:
RunWorkerAsync方法提交启动操作的请求 异步运行。在处理请求时,DoWork事件 被引发,然后开始执行你的背景 操作
因此RunWorkerAsync
仅提交启动操作的请求 - 这将引发DoWork
事件。它不能保证何时调用DoWork
。
使用单独的线程进行工作也是documented:
在单独的线程上执行操作。
很明显,在调用RunWorkerAsync
之外的其他线程上调用DoWork。