在我的WPF应用程序中-我有一个带有Gridview的Listview。用户可以将文件添加到此列表。
gridview应该让我拥有非常丰富的“行”,每一行显示文件名,额外的应用程序详细信息,最重要的是显示一个进度条。网格 View 中的每一行都数据绑定(bind)到集合中的业务对象,特别是该对象具有绑定(bind)到进度条的属性“Progress”。
我需要处理每个文件,提取数据并将数据发送到Web服务,并且在我收集文件时,我想在其各自的进度栏中显示每个文件的进度。
最初,我从一个简单的循环开始,该循环包含处理逻辑,该逻辑定期更新每一行的“Progress”字段,并指出UI的更新不是很好。
然后,我将循环中的处理逻辑移至BackgroundWorker,后者修改了业务对象“Progress”字段,并且由于UI线程的工作不是那么辛苦-它的响应速度要快得多。
但是,由于BackgroundWorker的异步特性,当循环旋转时,它实际上一次启动了多个BackgroundWorkers(每行一个)。我所有的进度条都开始进步...
将它限制为一次只有2-3个BackgroundWorkers的最佳方法是什么?甚至将其留在一个BackgroundWorker中-它直到上一个完成才开始吗?如何引入依赖关系,以便实质上所有BackgroundWorkers都是同步的?
最佳答案
您可以为此使用Task类,例如在示例here中