C# 将作业一次分配给一个BackgroundWorker线程

C# 将作业一次分配给一个BackgroundWorker线程,c#,.net,silverlight,backgroundworker,C#,.net,Silverlight,Backgroundworker,我的silverlight应用程序从webservice(异步)获取文件集。webservice方法接受文件名数组并返回文件集(也作为数组)。silverlight客户端对文件集发出几个这样的请求 客户端一次向Web服务发出许多请求。我需要客户端的BackgroundWorker线程来依次处理接收到的文件集 我如何在收到所有文件集时收集这些文件集,并将它们一次一个地交给BackgroundWorker线程 编辑: 我无法运行多个BackgoundWorker,因为文件集处理模块不是线程安全的。b

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

客户端一次向Web服务发出许多请求。我需要客户端的
BackgroundWorker
线程来依次处理接收到的文件集

我如何在收到所有文件集时收集这些文件集,并将它们一次一个地交给
BackgroundWorker
线程

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

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

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

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


但请注意:如果在您发送请求时工作人员退出,您将遇到问题。这就是为什么基本线程可能比后台线程更强大,尤其是当您不知道是否还有更多的文件集要处理时。这完全取决于您的工作流程。

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

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

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


但请注意:如果在您发送请求时工作人员退出,您将遇到问题。这就是为什么基本线程可能比后台线程更强大,尤其是当您不知道是否还有更多的文件集要处理时。这完全取决于您的工作流程。

使用/保存有关要处理的文件集的信息。。。在backgroundworker中,您只需执行
,而
循环将下一个文件集出列并处理它。。。所提到的集合是线程安全的,而且速度非常快,因为大多数操作都是无锁实现的…

使用/保存有关要处理的文件集的信息。。。在backgroundworker中,您只需执行
,而
循环将下一个文件集出列并处理它。。。所提到的集合是线程安全的,而且速度非常快,因为大多数操作都是无锁实现的…

我无法运行多个BackgorundWorkers,因为文件集处理模块不是线程安全的。我无法运行多个BackgorundWorkers,因为文件集处理模块不是线程安全的。可能存在并发队列为空,正在等待填充。当工作人员试图将其出列时会出现问题吗?不会有问题-要么它在
TryDequeue
ConcurrentQueue
)/
TryTake
BlockingCollection
)上返回false,要么它一直睡到有东西填满
Take
BlockingCollection
)-请遵循链接…@codr3:这些选项在Silverlight中都不可用(除非您自己编写)。发现Silverlight端口的并发队列对我有效。可能存在并发队列为空且等待填充的情况。当工作人员试图将其出列时会出现问题吗?不会有问题-要么它在
TryDequeue
ConcurrentQueue
)/
TryTake
BlockingCollection
)上返回false,要么它一直睡到有东西填满
Take
BlockingCollection
)-请遵循链接…@codr3:这些选项在Silverlight中都不可用(除非您自己编写)发现Silverlight端口的并发队列对我有效。