BackgroundWorker不处理异常

时间:2012-08-15 13:45:09

标签: c# multithreading

我真的读过Stackoverflow上所有其他类似的线程。没有什么对我有用...... 我抛出“异常”类型的异常,但我无法处理异常。

我在DoWork进程中尝试了它,在CompletedEvent中(使用try / catch,巫婆e.error ....)

void bgGetResponse_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    if (e.Error != null)
    {
        MessageBox.Show(e.Error.Message);
        ConvertByte(myFile);
        myFile= null;
    }
}

void bgGetResponse_DoWork(object sender, DoWorkEventArgs e)
{
    byte[] test= new byte[] { 1, 1, 0, 1, 1};
    //Here the error occured (just with  throw new Exception("error"))
    //The method only throws an exception (for test purposes)
    testResponse= _configManager.GetResponse(test, 0);
}

GetResponse(...)
{

   throw new Exception("..!");

}

有什么想法吗?

感谢您的努力

3 个答案:

答案 0 :(得分:2)

我通常只是在工作方法中捕获它并将结果设置为它。

private void BGW_DoWork(object sender, DoWorkEventArgs e)
{
    ...
}
catch (Exception ex)
{
    e.Result = ex;
}

然后查看已完成的事件,

private void BGW_RunWorkerCompleted(对象发件人,RunWorkerCompletedEventArgs e) {     this.Cursor = Cursors.Default;

try
{
    Exception ex = e.Result as Exception;
    if (null != ex)
        throw ex;

...

答案 1 :(得分:1)

如果"无法处理"您所说的例外无法使用catch,这是真的。您只需使用Error属性。你可以"扔"在您的Completed事件处理程序中;但是你堆叠的框架会有所不同。

e.g:

try
{
    if(e.Error != null) throw(e.Error)
    // handle success case
}
catch(MyException exception)
{
    // handle specific error.
}

答案 2 :(得分:1)

BackgroundWorkers DoWork函数中发生的任何未处理的异常将导致worker触发RunWorkerCompleted,其中event参数将包含错误。