[英]How can I get the return value when backgroundworker is complete
我想使用这种方法:
public static bool SynchronizeFiles(string source, string destination)
在BackgroundWorker
。 我定义BackgroundWorker
并将其添加到workerList
。 比一件一件地做这项工作。
private void CopyIfIsReady(Save save)
{
if (save.isDriveReady && save.isFileChanged && save.isPeriodCompleted)
{
BackgroundWorker BW = new BackgroundWorker();
BW.DoWork += (obj, e) => backgroundWorker1_DoWork(save);
BW.RunWorkerCompleted += backgroundWorker1_RunWorkerCompleted;
workerList.Add(BW);
BW_timer.Start(500);
}
}
private void BWTimerCallBack(object state)
{
if (workerList.Count >= 0)
{
if(!workerList[0].IsBusy)
{
workerList[0].RunWorkerAsync();
}
}
else
{
BW_timer.Stop();
}
}
private void backgroundWorker1_DoWork(Save save)
{
SynchronizeFiles(save.sourceFolder, save.destFolder);
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
workerList.RemoveAt(0);
}
但是,如何在backgroundWorker1_RunWorkerCompleted
中获取SynchronizeFiles
返回值。
您实际上并不需要backgroundWorker1_DoWork
方法,因为它只包装了SynchronizeFiles
方法调用。 您可以通过以下方式更改事件处理程序:
BW.DoWork += (obj, e) => { e.Result = SynchronizeFiles(save.sourceFolder, save.destFolder); }
现在,在backgroundWorker1_RunWorkerCompleted
内部,您可以通过e.Result
属性访问结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.