2012-10-12 43 views
3

我有一个显示图表和进度条的窗体。一些复杂的计算由BackgroundWorker组件进行,以便表单保持响应。将结果附加到列表中,然后调用ReportProgress方法,以便ProgressChanged事件处理程序可以更新进度条(它的作用)。使用BackgroundWorker 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任务完成。当我将数据分配给图表或者完全不同的东西时,我应该做一些不同的事情吗?

+0

它以什么方式不起作用?它会得到一个错误,还是该图表没有更新? –

+0

每次迭代后图表都不会更新,但一旦backrground工人完成,图表就会全部显示。后台工作人员可能会迭代几分钟,所以我想在每次迭代后更新图表。 – sarkyscouser

+0

如果您在ProgressChanged事件处理程序中放置断点,调试器是否显示包含任何数据的'myResultsList'?什么类型的对象是'myResultsList'? –

回答

1

我已经对此进行了排序,基本上后台工作人员的迭代速度比图表更新更快。因此,我现在正在清理图表,并在每次单独的线程中重新读取整个结果列表。一旦完成了后台工作的完整逻辑,这个问题可能会“自愈”,因为迭代需要更长的时间,但现在这是有效的。

相关问题