2011-12-17 39 views
1

我有一個小問題,我使用傳遞KeyValuePair列表從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,做它需要做的,而當backgroundWorker1完成後,該列表應該傳遞不知何故

我不知道從哪裏開始這樣做,所以任何幫助,非常感謝。

+1

什麼'BW2'確實是在'BW1'之前開始的?爲什麼你需要兩個獨立的體重? – sll 2011-12-17 20:42:39

回答

1

讓第一個RunWorkerCompleted以參數開始第二個。下面是一個例子,用於說明如何從第一個發送參數到第二個參數。

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結束後,信號的第二個工人來閱讀:

// prepare the list 
event.Set(); 

backgroundworker2你應該等待該事件的一些點:

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

您只需啓動代理中的第二個BackgroundWorker,用於處理第一個BackgroundWorker的RunWorkerCompleted事件。

只需將BW#2的RunWorkerAsync調用中的參數設置爲BW#1的返回值即可。

聽起來BW#1在BW#1完成之前沒有任何事情要做,所以沒有意義實現共享狀態或引發事件或實現觀察者類型模式。

+0

您是否確實指RunWorkerAsync? – 2011-12-17 21:58:55

+0

@SurjitSamra - 是的,RunWorkerAsync – micahtan 2011-12-21 02:53:54