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