首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何让BackgroundWorker返回一个对象

如何让BackgroundWorker返回一个对象
EN

Stack Overflow用户
提问于 2009-06-02 13:42:58
回答 6查看 65.9K关注 0票数 60

我需要让RunWorkerAsync()返回一个List<FileInfo>

能够从后台工作进程返回对象的过程是什么?

EN

回答 6

Stack Overflow用户

发布于 2009-06-02 13:56:59

BackgroundWorker (后台工作发生的地方)的DoWork事件处理程序中,有一个参数DoWorkEventArgs。此对象具有公共属性对象结果。当您的worker生成其结果(在您的示例中是一个List<FileInfo>)时,将e.Result设置为该值,然后返回。

现在您的BackgroundWorker已经完成了它的任务,它触发了RunWorkerCompleted事件,该事件有一个RunWorkerCompletedEventArgs对象作为参数。RunWorkerCompletedEventArgs.Result将包含来自BackgroundWorker的结果。

示例:

代码语言:javascript
复制
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());
}
票数 100
EN

Stack Overflow用户

发布于 2009-06-02 13:47:36

RunWorkerAsync()异步启动进程,并在进程实际完成之前返回并继续执行您的代码。如果您希望获得BackgroundWorker的结果,则需要创建一个实例变量来保存该值,并在BackgroundWorker完成后对其进行检查。

如果您想等到工作完成,那么您不需要BackgroundWorker

票数 1
EN

Stack Overflow用户

发布于 2009-06-02 13:46:57

根据您的模型,您可以让工作线程在完成其工作时回调其创建者(或其他进程),或者必须频繁地轮询工作线程以查看是否已完成,如果已完成,则获取结果。

等待工作线程返回其结果的想法破坏了多线程的好处。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/939635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档