一次将作业分配给BackgroundWorker线程

时间:2011-09-16 06:37:04

标签: c# .net silverlight backgroundworker

我的silverlight应用程序从Web服务(异步)中提取文件集。 webservice方法接受文件名数组并返回文件集(也作为数组)。 silverlight客户端对文件集提出了几个这样的请求。

客户端立即向Web服务发出许多请求。我需要在客户端使用 BackgroundWorker个帖子来处理收到的文件集 一个接一个

如何在收到所有文件集时收集它们,并将这些集合一次一个地提供给BackgroundWorker个帖子。

编辑: 我无法运行多个BackgorundWorkers,因为文件集处理模块不是线程安全的。

2 个答案:

答案 0 :(得分:5)

使用BlockingCollection / ConcurrentQueue来保存有关要处理的文件集的信息...在后台工作人员while循环下一个文件集并进行处理。 ..所提到的集合是线程安全的,而且非常快,因为大多数操作都是无锁实现的......

答案 1 :(得分:2)

backgroundworker没有内置的Listen机制。它应该执行一个长动作并终止。

一个解决方案可能包括为每个文件集启动一个backgroundworker

如果必须同步这些文件集的处理,您可以决定将每个请求推送到队列中(基本上是array。确保同步对它的访问)。每当backgroundworker处理完一个文件集时,它就会向主线程(ProgressChanged事件IIRC)报告并循环遍历阵列中的其他可能请求。只要数组为空,工作人员就会退出。

注意:如果工作人员在您发送请求时退出,则会出现问题。这就是为什么基本线程可能比后台线程更强大的原因,特别是如果你不知道是否还有其他文件集需要处理。这一切都取决于您的工作流程。