2012-10-12 62 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

我已經對此進行了排序,基本上後臺工作人員的迭代速度比圖表更新更快。因此,我現在正在清理圖表,並在每次單獨的線程中重新讀取整個結果列表。一旦完成了後臺工作的完整邏輯,這個問題可能會「自愈」,因爲迭代需要更長的時間,但現在這是有效的。

相關問題