sto lavorando con i seguenti componenti:BackgroundWorker gestione delle eccezioni
- una libreria (che genera un'eccezione)
- un banco di prova per testare la mia console di registrazione
- i blocchi applicativi di gestione delle eccezioni Enterprise Library
- i blocchi delle applicazioni aziendali biblioteca di registrazione
sto richiamando il metodo libreria utilizzando un backgroundworker. La libreria genera l'eccezione ma il gestore RunWorkerCompleted non viene mai chiamato.
L'unico modo per rilevare l'eccezione è circondare il codice del gestore DoWork con un blocco try/catch.
Si è frainteso la proprietà RunWorkerCompletedEventArgs.Error? Non è per ottenere le eccezioni che sono state scoperte da BackgroundWorker?
codeSample:
static BackgroundWorker w = new BackgroundWorker();
w.DoWork += new DoWorkEventHandler(w_DoWork);
w.RunWorkerCompleted +=
new RunWorkerCompletedEventHandler(w_RunWorkerCompleted);
w.RunWorkerAsync();
static void w_DoWork(object sender, DoWorkEventArgs e)
{
MyClass m = new MyClass();
w.result = m.Compute();
}
static void w_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
{
HandleException(e.Error);
}
/* result related code */
}
static void HandleException(Exception e)
{
ExceptionPolicy.HandleException(e, "MyPolicy");
}
Il campione di cui sopra porta ad una cessazione della mia applicazione di console. L'output vs2010 non scrive assolutamente nulla (solo output predefinito).
Quindi dov'è il problema?
// Modifica: questo snippet funziona per intercettare l'eccezione della libreria.
static void w_DoWork(object sender, DoWorkEventArgs e)
{
try
{
MyClass m = new MyClass();
w.result = m.Compute();
}catch(Exception e){ }
}
Hai qualcosa sul thread principale che impedisce la fine? Qualcosa come un po '(vero)? – dcarneiro
Sei sicuro al 100% che RunWorkerCompleted non venga mai chiamato? Ecco una domanda SO che dimostra che dovrebbe funzionare ... http: //stackoverflow.com/questions/1044460/unhandled-exceptions-in-backgroundworker –
non riesci a eseguire il debug e vedere cosa succede? cosa restituisce HandleException()? – Reniuz