2016-11-07 71 views
0

我想用这个方法:我怎样才能得到返回值时BackgroundWorker的完成

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_RunWorkerCompletedSynchronizeFiles返回值。

+1

您应该使用'Task'和'await'来代替。 – SLaks

回答

1

您并不需要backgroundWorker1_DoWork方法,因为它只是包装SynchronizeFiles方法调用。你可以改变事件处理方式如下:

BW.DoWork += (obj, e) => { e.Result = SynchronizeFiles(save.sourceFolder, save.destFolder); } 

现在里面backgroundWorker1_RunWorkerCompleted你可以通过e.Result属性访问的结果。

+0

谢谢。 İt的工作好:) –