3

グラフと進行状況バーを表示するフォームがあります。BackgroundWorkerフォームの応答性を維持するために、いくつかの複雑な計算がコンポーネントによって実行されます。結果がリストに追加され、ReportProgressメソッドが呼び出されて、ProgressChangedイベント ハンドラーがプログレス バーを更新できるようになります (実際に実行されます)。

ProgressChanedただし、進行状況バーを正常に更新している同じイベント ハンドラーでチャートを更新するのに苦労しています。これは可能だと思いますか?の各反復後にチャートを更新したいと思いますBackgroundWorkerBackgroundWorker別のスレッドで作業を行っているため、チャートを直接更新することはできません。

グラフを更新しようとしているイベント ハンドラーのコードは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クラスには と の 2 つのプロパティのみが含まIterationれますObjectiveFunction

現在、エラーは発生していませんが、BackgroundWorkerタスクが完全に完了するまでグラフは更新されません。データをグラフに割り当てるとき、またはまったく別のことを行う必要がありますか?

4

1 に答える 1

1

私はこれをソートしました。基本的に、バックグラウンドワーカーは、チャートが更新できるよりも速く反復していました。その代わりに、チャートをクリアして、結果リスト全体を毎回別のスレッドで読み返しています。バックグラウンドワーカーの完全なロジックが構築されると、反復に時間がかかるため、問題は「自己回復」する可能性がありますが、今のところこれは機能します。

于 2012-10-19T08:55:00.620 に答える