How to wait correctly until BackgroundWorker completes?
Try using the AutoResetEvent class like this: var doneEvent = new AutoResetEvent(false); var bw = new BackgroundWorker(); bw.DoWork += (sender, e) => { try { if (!e.Cancel) { // Do work } } finally { doneEvent.Set(); } }; bw.RunWorkerAsync(); doneEvent.WaitOne(); Caution: You should make sure that doneEvent.Set() is called no matter what happens. Also you … Read more