我需要让RunWorkerAsync()
返回一个List<FileInfo>
。
能够从后台工作进程返回对象的过程是什么?
发布于 2009-06-02 13:56:59
在BackgroundWorker
(后台工作发生的地方)的DoWork
事件处理程序中,有一个参数DoWorkEventArgs
。此对象具有公共属性对象结果。当您的worker生成其结果(在您的示例中是一个List<FileInfo>
)时,将e.Result
设置为该值,然后返回。
现在您的BackgroundWorker已经完成了它的任务,它触发了RunWorkerCompleted
事件,该事件有一个RunWorkerCompletedEventArgs
对象作为参数。RunWorkerCompletedEventArgs.Result
将包含来自BackgroundWorker
的结果。
示例:
private void bgw_DoWork(object sender, DoWorkEventArgs e)
{
int result = 2+2;
e.Result = result;
}
private void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
int result = (int)e.Result;
MessageBox.Show("Result received: " + result.ToString());
}
发布于 2009-06-02 13:47:36
RunWorkerAsync()
异步启动进程,并在进程实际完成之前返回并继续执行您的代码。如果您希望获得BackgroundWorker
的结果,则需要创建一个实例变量来保存该值,并在BackgroundWorker
完成后对其进行检查。
如果您想等到工作完成,那么您不需要BackgroundWorker
。
发布于 2009-06-02 13:46:57
根据您的模型,您可以让工作线程在完成其工作时回调其创建者(或其他进程),或者必须频繁地轮询工作线程以查看是否已完成,如果已完成,则获取结果。
等待工作线程返回其结果的想法破坏了多线程的好处。
https://stackoverflow.com/questions/939635
复制相似问题