データベースを更新しているWindowsプログラムがあります。進捗状況を表示したい2つのループがあります。最初のループは顧客のリストを取得し、2番目のループはその顧客の場所のリストを取得します。
DataTable dtCustomers = GetAllCustomers();
foreach(DataRow customer in dtCustomers.Rows)
{
//update Customer Progressbar...
//do some updating here...
DataTable dtLocations = GetAllLocations(customer);
foreach(DataRow location in dtLocations.Rows)
{
//do some updating here...
//update Location Progressbar...
}
//reset Location Progressbar...
}
だから私がやりたいのは、各ループの視覚的なプログレスバー(pb)を表示することです。顧客pbは、処理された顧客ごとに増加し、場所pbも増加します...唯一の違いは、場所に基づいて更新に時間がかかる/短くなる可能性があるため、場所pbが各場所の後にリセットされることです。
私は1人のバックグラウンドワーカーから始めて、顧客のpbをうまく更新することができました。次のコードを「スタート」ボタンに入れました。
private void buttonStart_Click(object sender, EventArgs e)
{
workerCustomers.RunWorkerAsync();
}
そして、workerCustomerのDoWork()イベントに、2つのループを配置します。「クロススレッド参照」エラーが発生するため、場所pbが更新されないことはわかっています。では、どうすれば自分のやりたいことをやることができますか?2つのbgワーカーをフォームに配置して、一方を他方から呼び出そうとしましたが、最初のワーカーがビジーであることを示す別のエラーが発生しました。