Je travaille avec les composants suivants:BackgroundWorker gestion des exceptions
- une bibliothèque (qui jette une exception)
- une console de test pour tester mon exploitation forestière
- les blocs d'application de gestion des exceptions bibliothèque d'entreprise
- les blocs d'application de journalisation de la bibliothèque de l'entreprise
J'invoque la méthode de la bibliothèque à l'aide un arrière-plan. La bibliothèque lève l'exception, mais le gestionnaire RunWorkerCompleted n'est jamais appelé. La seule façon d'attraper l'exception est d'entourer mon code de gestionnaire DoWork avec un bloc try/catch.
Avez-vous mal compris la propriété RunWorkerCompletedEventArgs.Error? N'est-ce pas pour obtenir des exceptions qui ont été interceptées par 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");
}
L'exemple ci-dessus conduit à une résiliation de mon application console. La sortie de vs2010 n'écrit absolument rien (seulement la sortie par défaut).
Alors où est le problème? // Éditer: cet extrait fonctionne pour intercepter l'exception de la bibliothèque.
static void w_DoWork(object sender, DoWorkEventArgs e)
{
try
{
MyClass m = new MyClass();
w.result = m.Compute();
}catch(Exception e){ }
}
Avez-vous quelque chose sur le fil principal qui l'empêche de se terminer? Quelque chose comme un moment (vrai)? – dcarneiro
Êtes-vous sûr à 100% que le RunWorkerCompleted n'est jamais appelé? Voici une question SO qui prouve que cela devrait fonctionner ... http: //stackoverflow.com/questions/1044460/unhandled-exceptions-in-backgroundworker –
vous ne pouvez pas déboguer et voir ce qui se passe? ce que HandleException() renvoie? – Reniuz