ラフ

投稿日時:

backgroundWorker[] BackgroundWorkers;←n個のbackgroundworkerを格納

void bgworker_ondowork(){
 while(!cancellationpending){
  target = fetch_data();
  if(test(target)){
   cancelallbgworkers();
   result_found = true;
   result_data = target;
   return;
  }
 }
}

fetch_data(){
//staticを使ってデータを一個ずつ渡していく関数
//既にデータを渡しきっている状態で呼び出されたら、
 cancelbgworkers();
 return;
//する
}

開始処理(){
 result_found = false;
 result_data = null;
 //bgworkers作る
 foreach(bgworkers)をRunWorkerAsync();
}

bgworker_onrunworkercompleted(){
 update_GUI();
}

投稿日時:
//もしかしたら複数含まれてるかもしれないので
  if(test(target)){
   cancelallbgworkers();
   // result_found = true;
   // result_data = target;
   push_result(target); // <-New!
   return;
  }
//にしよう
投稿日時:
//てことは、開始処理も
 // result_found = false;
 // result_data = null;
 result_clear();