private void SubmitQueries(object sender, DoWorkEventArgs e) { // Parse Arguement Object List <string> queryList = (List <string>)e.Argument; string outPath = queryList.Last(); queryList.RemoveAt(queryList.Count - 1); // Set Callbacks to update UI SetValueCallback2 d = new SetValueCallback2(SetProcessBarValue); SetValueCallback f = new SetValueCallback(SetProgressBarvalue); // Disable Export Button progress.Dispatcher.BeginInvoke(d, false); List <BackgroundWorker> workers = new List <BackgroundWorker>(); // For every query, // configure new argument object // create a new thread // start the thread foreach (string query in queryList) { string combo_query = outPath + "\n" + query; BackgroundWorker worker = new BackgroundWorker(); worker.WorkerReportsProgress = true; worker.DoWork += new DoWorkEventHandler(SubmitQuery); worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(QuerySumbitted); workers.Add(worker); worker.RunWorkerAsync(argument: combo_query); } // Wait for all threads to finish before finishing the worker thread bool isComplete = false; do { foreach (BackgroundWorker worker in workers) { if (worker.IsBusy) { isComplete = false; break; } else { isComplete = true; } } } while (!isComplete); }
private void QueriesComplete(object sender, RunWorkerCompletedEventArgs e) { SetValueCallback2 enable = new SetValueCallback2(SetProcessBarValue); progress.Dispatcher.Invoke(enable, true); }