private void bgwMain_DoWork(object sender, DoWorkEventArgs e) { object[] parameters = e.Argument as object[]; BackgroundWorkerTasks task = (BackgroundWorkerTasks)parameters[0]; if (task == BackgroundWorkerTasks.AddServicesFromFile) { string path = parameters[1] as string; e.Result = AddServicesFromDataTable(path, e); } else if (task == BackgroundWorkerTasks.CheckForExisingServices) { List <DataServiceInfo> rows = parameters[1] as List <DataServiceInfo>; e.Result = CheckForServicesInCache(rows, e); } else if (task == BackgroundWorkerTasks.UpdateDatabase) { List <DataServiceInfo> services = parameters[1] as List <DataServiceInfo>; e.Result = AddServicesToDatabase(services, e); } else { // Build parameters to pass to the background worker object[] outParameters = new object[2]; outParameters[0] = BackgroundWorkerTasks.Unknown; outParameters[1] = "Unknown task provided to background worker"; e.Result = outParameters; } }
private void bgwMain_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { this.Cursor = Cursors.Default; BackgroundWorkerTasks task = BackgroundWorkerTasks.Unknown; // Report the result if (e.Error != null) { MessageBox.Show(e.Error.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); } else if (e.Cancelled) { if (this.Visible == true && _formIsClosing == false) { MessageBox.Show("Operation cancelled", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); } } else { string message = ""; object[] parameters = e.Result as object[]; if ((parameters != null) && (parameters.Length > 1)) { message = parameters[1] as string; task = (BackgroundWorkerTasks)parameters[0]; if (task == BackgroundWorkerTasks.AddServicesFromHydroPortal || task == BackgroundWorkerTasks.AddServicesFromFile || task == BackgroundWorkerTasks.AddServicesFromHydroServer) { dgvAddServices.Enabled = true; List <string[]> rowsToAdd = parameters[2] as List <string[]>; foreach (string[] row in rowsToAdd) { int rowIndex = dgvAddServices.Rows.Add(row); SelectDataGridViewRow(dgvAddServices, rowIndex); //dgvAddServices.Rows[dgvAddServices.Rows.Add ( row )].Cells["Selected"].Value = true; } this.ActiveControl = btnUpdate; } else if (task == BackgroundWorkerTasks.CheckForExisingServices) { List <int> rowsToSelect = parameters[2] as List <int>; foreach (int row in rowsToSelect) { dgvAddServices.Rows[row].Cells["Selected"].Value = true; } this.ActiveControl = btnCheckExisting; } else if (task == BackgroundWorkerTasks.UpdateDatabase) { this.ActiveControl = btnUpdate; } } MessageBox.Show(message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); } // Enable controls that were disabled until the asynchronous operation was finished RestoreFormFromWork(); if (_formIsClosing == true) { _formIsClosing = false; Hide(); } else if (task == BackgroundWorkerTasks.UpdateDatabase) { this.DialogResult = System.Windows.Forms.DialogResult.OK; } }