2010-10-19 18 views
5

que sé, que puede manejar errores BackgroundWorker en manejador RunWorkerCompleted, como en el código siguientemanejo de errores con BackgroundWorker

var worker = new BackgroundWorker(); 
worker.DoWork += (sender, e) => 
    { 
     throw new InvalidOperationException("oh shiznit!"); 
    }; 
worker.RunWorkerCompleted += (sender, e) => 
    { 
     if(e.Error != null) 
     { 
      MessageBox.Show("There was an error! " + e.Error.ToString()); 
     } 
    }; 
worker.RunWorkerAsync(); 

Pero mi problema es que yo sigo recibiendo un mensaje: error fue unhadled en el código de usuario en línea

throw new InvalidOperationException("oh shiznit!"); 

¿Cómo puedo resolver este problema?

+0

¿Lo prueba en una aplicación WinFormss? ¿O consola? –

Respuesta

9

Lo recibe porque tiene un depurador adjunto. Intente iniciar la aplicación sin un depurador: no se dispara ninguna excepción y cuando el trabajador completa la operación le muestra el MessageBox.

+0

sí, esto es correcto – mike

+4

¡márquelo como la respuesta! – Tim

1

No puedo reproducir el error. Lo siguiente funciona bien:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     var worker = new BackgroundWorker(); 
     worker.DoWork += (s, evt) => 
     { 
      throw new InvalidOperationException("oops"); 
     }; 
     worker.RunWorkerCompleted += (s, evt) => 
     { 
      if (evt.Error != null) 
      { 
       MessageBox.Show(evt.Error.Message); 
      } 
     }; 
     worker.RunWorkerAsync(); 
    } 
}