我可以在WPF中以同步方式使用多个BackgroundWorker吗?

dan*_*dan 4 c# wpf multithreading synchronization .net-4.0

在我的WPF应用程序中 - 我有一个带有Gridview的Listview.用户可以将文件添加到此列表中.

gridview应该允许我有相当丰富的"行",每行显示文件名,额外的应用程序细节,最重要的是进度条.gridview中的每一行都数据绑定到集合中的业务对象,具体而言,该对象具有绑定到进度条的属性"Progress".

我需要处理每个文件,提取数据并将数据发送到Web服务,我希望在处理文件集合时显示每个文件在其各自进度条中的进度.

最初,我开始使用一个包含处理逻辑的简单循环,该循环定期更新每行的"Progress"字段,并注意到UI没有很好地更新.

然后我将循环中的处理逻辑移动到BackgroundWorker,后者修改了业务对象"Progress"字段,并且因为UI线程没有那么努力 - 它的响应速度要快得多.

但是由于BackgroundWorker的异步特性,它在循环旋转时几乎同时启动了多个BackgroundWorkers(每行一个).我的所有进度条都开始进展......

什么是最好的方法将其限制为只有2-3个BackgroundWorkers一次?或者甚至将它留在一个BackgroundWorker上 - 它在上一个完成之前不会启动?如何引入依赖关系以便本质上所有BackgroundWorkers都是同步的?

ole*_*sii 7

你可以使用Task类,就像这里的示例一样