在我的WPF应用程序中,我有一个Listview,里面有一个Gridview。用户可以将文件添加到此列表中。
gridview应该允许我有非常丰富的“行”,每一行都显示文件名、额外的应用程序详细信息,最重要的是一个进度条。gridview中的每一行都数据绑定到集合中的业务对象,特别是该对象具有绑定到进度条的属性“Progress”。
我需要处理每个文件,提取数据并将数据发送到web服务,当我处理文件集合时,我想在它各自的进度栏中显示每个文件的进度。
最初,我从一个包含处理逻辑的简单循环开始,该循环定期更新每行的“进度”字段,并注意到UI更新得不太好。
然后,我将循环中的处理逻辑移动到BackgroundWorker,它修改了业务对象“Progress”字段,因为UI线程工作不太努力,所以响应速度要快得多。
然而,由于BackgroundWorker的异步性质,它在循环结束时几乎同时启动了多个BackgroundWorkers(每行一个)。我所有的进度条都开始进步。。。
将其限制为同时只有2-3名后台工作人员的最佳方法是什么?或者甚至把它留给一个BackgroundWorker,直到上一个完成后才开始?如何引入依赖关系,使所有BackgroundWorkers本质上都是同步的?