2
我想处理在RunWorkerCompleted
处理程序中的DoWork
处理程序中发生的异常,但是当代码在调试程序下运行时,我首先遇到另一个异常“用户代码未执行处理”。如何处理从BackgroundWorker的DoWork处理程序抛出的异常?
的代码下面简短的例子我使用的是:
BackgroundWorker _worker;
public void Test()
{
_worker = new BackgroundWorker();
_worker.WorkerReportsProgress = false;
_worker.WorkerSupportsCancellation = false;
_worker.DoWork += new DoWorkEventHandler(bw_DoWork);
_worker.RunWorkerCompleted += new
RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
_worker.RunWorkerAsync();
}
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
e.Result = ActuallWorkHere();
}
private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
var t = e.Error;
}
private IEnumerable<string> ActuallWorkHere()
{
throw new Exception("test");
// "Exeption was unhandled by user code" if called
string[] res = { "test" };
return res;
}
我在做什么错?
您究竟在哪里得到异常?我没有看到你的代码中的一个尝试抓住! – banging
“exeptiong first”应为“首次机会例外”。这很正常,调用DoWork的代码抓住了这个例外。在RunWorkerCompleted中你应该用它来做什么取决于你。例如,你可以写'if(e.Error!= null)throw e.Error;'。 –