Либо я выбрасываю исключение, либо вызываю его естественным образом в DoWork, и оно не перехватывается, и управление не передается рабочей подпрограмме завершения, вместо этого получается то исключение, которое я перехватываю в файле Program.csпрограмма
// ...
BackgroundWorker worker = new BackgroundWorker();
worker.WorkerSupportsCancellation = true;
worker.WorkerReportsProgress = true;
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
worker.RunWorkerAsync();
// ...
void worker_DoWork(object sender, DoWorkEventArgs e)
{
// ...
throw new Exception("I want to be caught and passed to completed event handler")
// ...
}