private void Initialize() { _bw?.CancelAsync(); var waitScope = WaitCursorScope.Enter(); _oldSubmoduleInfo = null; if (Submodules.SelectedRows.Count == 1) { _oldSubmoduleInfo = Submodules.SelectedRows[0].DataBoundItem as GitSubmoduleInfo; } lock (_modules) { _modules.Clear(); } _bw = new BackgroundWorker { WorkerReportsProgress = true, WorkerSupportsCancellation = true }; _bw.DoWork += (sender, e) => { foreach (var oldSubmodule in Module.GetSubmodulesInfo()) { if (_bw.CancellationPending) { e.Cancel = true; break; } _bw.ReportProgress(0, oldSubmodule); } }; _bw.ProgressChanged += (sender, e) => { lock (_modules) { lock (_modules) { _modules.Add(e.UserState as GitSubmoduleInfo); } if (_oldSubmoduleInfo != null) { DataGridViewRow row = Submodules.Rows .Cast <DataGridViewRow>() .FirstOrDefault(r => r.DataBoundItem as GitSubmoduleInfo == _oldSubmoduleInfo); if (row != null) { row.Selected = true; } } } }; _bw.RunWorkerCompleted += (_, e) => waitScope.Dispose(); _bw.RunWorkerAsync(); }
private void Initialize() { if (bw != null) bw.CancelAsync(); UseWaitCursor = true; _oldSubmoduleInfo = null; if (Submodules.SelectedRows.Count == 1) _oldSubmoduleInfo = Submodules.SelectedRows[0].DataBoundItem as GitSubmoduleInfo; lock (modules) modules.Clear(); bw = new BackgroundWorker(); bw.DoWork += bw_DoWork; bw.ProgressChanged += bw_ProgressChanged; bw.RunWorkerCompleted += bw_RunWorkerCompleted; bw.WorkerReportsProgress = true; bw.WorkerSupportsCancellation = true; bw.RunWorkerAsync(); }