【发布时间】:2019-07-14 17:32:14
【问题描述】:
我有一个简单的BackgroundWorker 应该会生成结果,但我不知道如何将它们返回到我的调用方法。
我已经阅读了许多答案,它们都向我展示了RunWorkerCompleted 事件如何接收DoWork 事件处理程序的结果,并且为了证明这一点,它们显示了一个带有结果的消息框。这一切都很好,但是我如何将结果返回到调用RunWorkerAsync 的实际方法?
myResult=myBackGroundWorker.RunWorkerAsync(); // This obviously doesn't compile
这个答案特别有用:
How to make BackgroundWorker return an object
但我仍然不知道如何访问结果。 这个答案还提到了委托的使用:
BackgroundWorker Return A Value?
但我不明白这是否能解决我的问题,或者我是否仍能在 RunWorkCompleted 事件处理程序中得到结果。
【问题讨论】:
-
如果你想要这样,我会推荐
Task和await。 -
如果不破解它的工作,您将无法将其返回到
RunWorkerAsync调用。RunWorkerAsync仅启动 worker,完成后调用回调。你想要的会搞砸目的,因为你需要等待那个后台工作人员,这正是回调应该使不必要的。对于您的功能,您应该查看 async/await。 -
最简单的方法是使用 ReportProgress。您可以返回一个状态对象,该对象可以返回一个或多个对象。见 msdn:docs.microsoft.com/en-us/dotnet/api/…
-
你的问题零意义。像
BackgroundWorker这样的类及其方法RunWorkerAsync()的全部意义在于,当您希望在后台 完成后台工作时调用该方法。根据定义,这意味着当RunWorkerAsync()方法返回时,工作尚未完成。考虑到方法的整个点要在工作结果可用之前返回,该方法怎么可能返回工作结果? -
@PeterDuniho 我显然没有正确理解 backgroundworker 的用法,但我认为我没有任何意义......最后我只是想从后台操作中获取结果,正如许多其他人更有建设性地指出的那样,可以使用任务和异步/等待来实现。
标签: c# backgroundworker