我想处理DoWork
处理程序中RunWorkerCompleted
处理程序内部发生的异常,但是当代码在调试器下运行时,我首先得到另一个异常“Exeption未被用户代码处理”。< / p>
这里是我正在使用的代码的简短示例:
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;
}
我做错了什么?
答案 0 :(得分:4)
您实际上并没有做错任何事情,这是Visual Studio在调试器中运行代码时处理未处理错误的原因:
来自MSDN上的BackgroundWorker.DoWork Event:
如果您在Visual Studio调试器下运行,调试器将会 在未处理的DoWork事件处理程序中断点 提出异常。
尝试运行已编译的程序,您将看不到这一点。
请注意,您可以在DoWork中处理此异常,并且RunWorkerCompleted处理程序中的RunWorkerCompletedEventArgs.Error属性仍会存储错误的详细信息。