2011-12-17 16 views
1

にKeyValuePairリストに渡して、私はそれを行うために必要なものを行うには、backgroundWorker1で私は少し問題を抱えているbackgroundWorker1からbackgroundWorker2

var filelist = new List<KeyValuePair<string, string>>(); 
filelist.Add(new KeyValuePair<string, string>(a, b)); 
filelist.Add(new KeyValuePair<string, string>(c,d)); 

を使用していて、backgroundWorker1が行われたときに、リストを渡す必要があります何らかの理由でbackgroundWorker2に接続

私はそれをやってもどこから助けても大丈夫です。

+1

「BW2」とは、「BW1」より前に起動しますか?なぜ2つの別々のBWが必要なのですか? – sll

答えて

1

最初のRunWorkerCompletedに2番目の引数を指定します。ここでは、最初から2番目の引数をどのように送信するかという考え方の例を示します。

public Form1() 
{ 
    InitializeComponent(); 
    backgroundWorker1.DoWork += backgroundWorker1_DoWork; 
    backgroundWorker1.RunWorkerCompleted += backgroundWorker1_RunWorkerCompleted; 

    backgroundWorker2.DoWork += backgroundWorker2_DoWork; 
    backgroundWorker2.RunWorkerCompleted += backgroundWorker2_RunWorkerCompleted; 

    backgroundWorker1.RunWorkerAsync(); 
} 


void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
{ 
    e.Result = "a"; 
} 

void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
{ 
    string s = (string)e.Result; 
    backgroundWorker2.RunWorkerAsync(s); 
} 

void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e) 
{ 
    e.Result = (string)e.Argument; 
} 

void backgroundWorker2_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
{ 
    Text = (string)e.Result; 
} 
1

リストがワーカーとイベント変数の両方に表示されていることを確認してください(例:AutoresetEvent)。次に、リスト上の作業がbackgroundworker1に終了したとき、それを読むために第2のワーカーを合図:backgroundworker2

// prepare the list 
event.Set(); 

あなたがイベントにいくつかの点で待機しなければならない:

event.WaitOne(); 
// use the list 
1

をあなたが簡単に始めることができます最初のBackgroundWorkerのRunWorkerCompletedイベントを処理するために使用しているデリゲートの2番目のBackgroundWorkerです。

BW#2のRunWorkerAsync呼び出しでargsをBW#1の戻り値に設定するだけです。

BW#1が終了する前にBW#2が何かをしているようには聞こえないので、共有状態やイベントの発生、またはオブザーバー型パターンの実装は必要ありません。

+0

あなたは実際にRunWorkerAsyncを意味しますか? –

+0

@SurjitSamra - はい、RunWorkerAsync – micahtan

関連する問題