www.bewise.fr

Recherche

Gérer les exceptions avec les BackgroundWorker

Par L'équipe Bewise, posté le 12/07/2010

Tags : C#

Si une exception est levée durant l'opération asynchrone du BackgroundWorker, le composant la récupère et ne la lève pas.

Par exemple, le code suivant ne lèvera aucune exception :

private void bgWorker_DoWork(object sender, DoWorkEventArgs e)
{
    throw new ApplicationException("Niaaa");
}

Toutefois, vous pouvez savoir si une exception a été levée au niveau de l'évènement RunWorkerCompleted grâce à la propriété Error de l'EventArgs :

private void bgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    if (e.Error != null)
        ManageError(e.Error);
    WorkCompleted(e.Result);
}

Attention, ce code ne fonctionne pas : en effet l'exception est levée ! 

La raison (merci Reflector) : si vous essayez d'accéder à la propriété Result alors qu'il y a une erreur l'exception est propagée !

De la même manière, si vous essayez d'accéder au résultat alors que l'opération a été annulée, une InvalidOperationException est levée.


Commentaires