我有一点问题,我正在使用
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完成后,列表应该以某种方式传递给backgroundWorker2。
我不知道哪里开始这样做所以任何帮助都非常感谢。
让第一个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;
}
确保列表对工作人员和事件变量都可见(例如,它可以是AutoresetEvent
)。然后当列表中的工作在backgroundworker1
中完成时,指示第二个工作人员读取它:
// prepare the list
event.Set();
在backgroundworker2
,您应该在活动的某个时刻等待:
event.WaitOne();
// use the list
您只需在用于处理第一个BackgroundWorker的RunWorkerCompleted事件的委托中启动第二个BackgroundWorker。
只需将BW#2的RunWorkerAsync调用中的args设置为BW#1的返回值即可。
听起来BW#2在BW#1完成之前有任何事情要做,所以没有必要实现共享状态或引发事件或实现观察者类型模式。