/// <summary> /// Add work in BackgroundWorker List /// </summary> /// <param name="autoBackupData"></param> private void AddWorker(AutoBackupData autoBackupData) { ///Build Workers/// BackgroundWorker BW = new BackgroundWorker(); BW.DoWork += (obj, e) => { e.Result = FileOperation.SynchronizeFiles(autoBackupData.sourceFolder, autoBackupData.destFolder, Form1.programData.Options.CopySpeed); }; BW.RunWorkerCompleted += (obj, e) => backgroundWorker1_RunWorkerCompleted(obj, e, autoBackupData); workerList.Add(BW); if (!workerList[0].IsBusy) { workerList[0].RunWorkerAsync(); } }
/// <summary> /// Build BackgroundWorker to copy /// </summary> /// <param name="autoBackupData"></param> private void CopyIfReady(AutoBackupData autoBackupData) { try { if (autoBackupData.isDestinationDriveReady && autoBackupData.isSourceDriveReady && ((autoBackupData.period == Method.Whenfilechanged) ? autoBackupData.isFileChanged : autoBackupData.isPeriodCompleted)) { AddWorker(autoBackupData); } else { Tools.LogWriter("It's not ready to copy : " + ((autoBackupData.period == Method.Whenfilechanged) ? "(s-d-chng) " + autoBackupData.isSourceDriveReady + autoBackupData.isDestinationDriveReady + autoBackupData.isFileChanged : "(s-d-per) " + autoBackupData.isSourceDriveReady + autoBackupData.isDestinationDriveReady + autoBackupData.isPeriodCompleted)); } } catch (Exception ex) { Tools.ErrorWriter(ex); } }
/// <summary> /// Event for completed background worker /// </summary> /// <param name="sender"></param> /// <param name="e">Uses for result</param> /// <param name="data">Work that is completed</param> private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e, AutoBackupData data) { try { if ((bool)e.Result == true) { int index = autoBackupDatas.FindIndex(k => k == data); Tools.LogWriter("------------------------------Worker completed. " + autoBackupDatas[index].sourceFolder + " remove from worker"); workerList.RemoveAt(0); if (index > -1) { if (data.period == Method.Whenfilechanged) { Tools.LogWriter("Set values of isFileChanged to false", Tools.CreateFolderName(data.sourceFolder)); autoBackupDatas[index].isFileChanged = false; watcher_.Start(data.sourceFolder); } else { Tools.LogWriter("Set values of isPeriodCompleted to false (" + DateTime.Now + ")"); autoBackupDatas[index].isPeriodCompleted = false; autoBackupDatas[index].Timer.Start(); } } } else { Tools.LogWriter("Worker compleated but file senkronisation fail. worker move to end of list.", Tools.CreateFolderName(data.sourceFolder)); BackgroundWorker temp = workerList[0]; workerList.RemoveAt(0); workerList.Add(temp); } if (workerList.Count > 0) { workerList[0].RunWorkerAsync(); } } catch (Exception ex) { Tools.ErrorWriter(ex); } }