【发布时间】:2011-05-30 13:01:55
【问题描述】:
在我的 WPF 应用程序中 - 我有一个内部带有 Gridview 的 Listview。用户可以将文件添加到此列表中。
gridview 应该允许我拥有相当丰富的“行”,每行显示文件名、额外的应用程序详细信息,最重要的是一个进度条。 gridview 中的每一行数据绑定到集合中的业务对象,具体而言,该对象具有绑定到进度条的属性“Progress”。
我需要处理每个文件,提取数据并将数据发送到 Web 服务,并且我想在处理文件集合时在其各自的进度条中显示每个文件的进度。
最初,我从一个包含处理逻辑的简单循环开始,该循环定期更新每一行的“进度”字段,并注意到 UI 没有很好地更新。
然后,我将循环中的处理逻辑移至修改业务对象“Progress”字段的 BackgroundWorker,并且因为 UI 线程工作不那么努力 - 它的响应速度更快。
但是,由于 BackgroundWorker 的异步特性,它在循环开始时几乎同时启动了多个 BackgroundWorker(每行一个)。我所有的进度条都开始进步了...
将其限制为一次只能运行 2-3 个 BackgroundWorker 的最佳方法是什么?或者甚至将它留在一个 BackgroundWorker - 并且直到前一个完成后才开始?我怎样才能引入一个依赖,以便本质上所有的 BackgroundWorkers 都是同步的?
【问题讨论】:
-
如果你想让它们同步,那你为什么不创建一个以同步方式完成所有工作的后台工作人员,而不是将其分成多个工作人员?
标签: c# wpf multithreading .net-4.0 synchronization