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.
