使用BackgroundWorker ProgressChanged事件更新图表?

时间:2012-10-12 14:04:57

标签: vb.net charts backgroundworker

我有一个显示图表和进度条的表单。一些复杂的计算由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任务完成之前,图表不会更新。当我将数据分配给图表或完全不同的东西时,我应该做些不同的事吗?

1 个答案:

答案 0 :(得分:1)

我已对此进行了排序,基本上后台工作者的迭代速度比图表更新速度快。所以我现在正在清理图表并每次在一个单独的线程上读回整个结果列表。一旦构建了后台工作者的完整逻辑,问题可能会“自我修复”,因为迭代需要更长的时间,但是现在这可行。