许多BackgroundWorker实例与使用Tasks和WorkerReportsProgress的实例相对应

时间:2013-11-27 09:32:12

标签: c# .net-4.0 task-parallel-library backgroundworker

我有多表GUI应用程序。每个表都填充了自己的BackgroundWorker实例的帮助。但现在我需要渲染一个表,从不同的慢速远程源获取行。因此,每一行都应该在收到后立即显示为平行。

我看到两种方式:

  • 而不是BackgroundWorker为表创建实例 行;
  • 继续使用BackgroundWorker(用于与UI交互)但在 DoWorkEventHandler对源中的Parallel.ForEach请求执行 在响应后使用ProgressChanged调用进行集合。

哪个更正确?

1 个答案:

答案 0 :(得分:0)

假设它就像我的情况一样,我的源代码主要是第三方,并且无法控制和分割不同的格式(Web服务,WCF,本地非托管DLL,.Net DLL,Java服务和Excel)只是为了填充单个列表。

无论如何在我的情况下我使用了7名工人。 第一个列出所有来源,现在我有40个来源。

然后,工作人员启动最多6个其他工作人员,每个工作者有1个源,并更新进度异步。一旦一个工人完成主工作人员,就用下一个列表开始一个新工作,依此类推。

我注意到在我的情况下超过6我的性能会降低,但这取决于您的架构和源类型。如果我通过网络访问的资源较少,我可以增加,但带宽会减慢。