2008-12-22 129 views
1

我的应用程序在多个文件上独立执行耗时的工作。我创建了一个BackgroundWorker来将工作交给每个文件,但看起来背景工作者只能执行异步工作。是否有可能与它一致地执行多个异步任务,或者是否存在执行同步操作的类似对象?BackgroundWorker中的同步工作

+0

这似乎很奇怪。工作是同步的还是异步的? 如果它是同步的,那么在继续之前需要等待它,那么为什么要将它传递给后台工作人员,这意味着要在后台执行某些操作? – Yuliy 2008-12-22 22:48:31

回答

2

后台工作人员通常用于更新UI和/或关闭工作,以便在长时间运行的进程发生时不冻结UI。这意味着你“传递”了后台工作进程的“文件工作”,然后使用回调来更新UI(通常),在此期间你的APP保持响应。

如果这些项目是独立的,那么您可能需要暂时搁置一些线程来分割工作。再次,如果我正确地理解你。如果我是那么你可能想看看Jon Skeet's线程文章。

1

虽然你可以使用BackgroundWorker,但我认为你应该简单地分离出几个线程来完成这项工作。一个线程(可能是主线程)将创建并启动这些工作线程,然后对所有工作者执行Join,以等待处理完成。

或者,如果您使用.Net 3.5,请看一下Parallel Extensions for .Net。该库中的任务对象可能适合您的情况。

+0

Joe Duffy非常棒的并行扩展是一个了不起的但他们仍然在CTP – cgreeno 2008-12-22 23:31:02

0

通过在代码中创建多个BackgroundWorker对象,可以执行多个异步任务。我们创建了一个JobPool类,该类创建了许多要运行的BackgroundWorker对象,以便我们可以控制任何时候运行的总数。但是,如果只有几个文件,你会处理这将是矫枉过正。