使用BackgroundWorker的ProgressChanged事件更新图表?

3
我有一个表单,显示一个图表和进度条。 BackgroundWorker 组件执行一些复杂的计算,以使表单保持响应性。结果附加到列表中,然后调用 ReportProgress 方法,以便 ProgressChanged 事件处理程序可以更新进度条(它确实这样做)。
然而,我很难在同一 ProgressChaned 事件处理程序中更新图表,该处理程序成功地更新了进度条。我假设这是可能的?我希望在每次 BackgroundWorker 迭代之后更新图表。我无法直接从 BackgroundWorker 更新图表,因为它正在不同的线程上进行工作。
尝试更新图表的 ProgressChanged 事件处理程序中的代码如下:
Me.ResultsChart.DataSource = myResultsList
With Me.ResultsChart.Series("Results")
    .XValueMember = "Iteration"
    .YValueMembers = "ObjectiveFunction"
End With
myResultsList列表非常简单。它被定义为Private myResultsList As List(Of Results) = New List(Of Results)Results类仅包含两个属性:IterationObjectiveFunction
目前,它没有给出任何错误,但是图表在BackgroundWorker任务完全完成之前不会更新。当我将数据分配给图表时,我应该做些不同的事情,还是完全不同的事情?

它是以什么方式无法运行?它是否会出现错误,还是图表只是不更新? - Steven Doggart
图表在每次迭代后都不会更新,但是在后台工作程序完成后会完整显示。后台工作程序可能会迭代几分钟,因此我希望在每次迭代后更新图表。 - Altycoder
如果您在ProgressChanged事件处理程序中设置断点,调试器是否显示包含任何数据的myResultsListmyResultsList是什么类型的对象? - Steven Doggart
私有 myResultsList 作为结果列表(Of Results) = 新的结果列表(Of Results) - Altycoder
结果类仅包含两个属性,迭代和目标函数。 - Altycoder
是的,如果我在断点处并循环几次,myResultsList确实包含数据。图表最终完全正确地显示,问题在于如何使用backgroundworker迭代更新它。 - Altycoder
1个回答

1
我已经解决了这个问题,基本上是后台工作线程的迭代速度比图表更新速度快。因此,现在我每次都会清除图表并在单独的线程上读取整个结果列表。一旦后台工作线程中的全部逻辑建立起来,问题可能会“自我修复”,因为迭代时间会变长,但目前这种方法有效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接