J'ai une petite application WinForms qui utilise un objet BackgroundWorker pour effectuer une opération de longue durée.
L'opération en arrière-plan génère des exceptions occasionnelles, généralement lorsque quelqu'un a un fichier ouvert qui est en train d'être recréé.
Que le code soit exécuté depuis l'IDE ou non, .NET affiche une boîte de dialogue d'erreur informant l'utilisateur qu'une exception non gérée s'est produite. La compilation du code à l'aide de la configuration Release n'y change rien non plus.
Selon MSDN :
Si l'opération lève une exception que votre code ne gère pas, le BackgroundWorker capture l'exception et la transmet au gestionnaire d'événements RunWorkerCompleted, où elle est exposée comme la propriété Error de System.ComponentModel..: :.RunWorkerCompletedEventArgs. Si vous vous exécutez sous le débogueur Visual Studio, le débogueur s'interrompra à l'endroit du gestionnaire d'événements DoWork où l'exception non gérée a été levée.
Je m'attends à ce que ces exceptions soient levées à l'occasion et j'aimerais les traiter dans l'événement RunWorkerCompleted plutôt que dans DoWork. Mon code fonctionne correctement et l'erreur est traitée correctement dans l'événement RunWorkerCompleted, mais je n'arrive pas à trouver comment empêcher la boîte de dialogue d'erreur .NET se plaignant de l'exception non gérée de se produire.
Le BackgroundWorker n'est-il pas censé corriger cette erreur automatiquement ? N'est-ce pas ce que dit la documentation MSDN ? Que dois-je faire pour informer .NET que cette erreur est tout en permettant à l'exception de se propager dans la propriété Error des RunWorkerCompletedEventArgs ?