2010-09-22 5 views
0

Une exception est générée dans un contrôle utilisateur basé sur une zone d'image, entraînant l'affichage de l'image d'erreur type (X rouge). Étant donné que le thread graphique a intercepté et géré l'exception elle-même, je ne peux pas facilement savoir où l'exception s'est produite et déboguer. Je remballe actuellement tout le code OnPaint dans un try-catch, et j'ai été capable de déboguer le code, mais je l'ai trouvé assez fastidieux et je me suis demandé s'il y avait un moyen d'entrer dans le débogueur à partir d'une exception .Comment intercepter une exception dans un thread graphique?

+0

WinForms ou WPF? – Richard

Répondre

2

Cela fonctionne déjà de cette façon par défaut. La méthode de gestion des exceptions de thread UI est contrôlée par Application.SetUnhandledExceptionMode(). La valeur par défaut est UnhandledExceptionMode.CatchException de sorte que l'événement ThreadException est déclenché et, par défaut, crée un ThreadExceptionDialog. Toutefois, si un débogueur est connecté, il remplace ce mode. De sorte qu'une exception sera toujours non gérée s'il n'y a pas de clause catch active. Pour que le débogueur s'arrête, vous permettant de diagnostiquer le problème. En écrivant votre propre essai/catch, vous empêchez cela de fonctionner.

Attention, onPaint() peut être spécial, en particulier pour PictureBox. Il a une clause try/catch, attrape une exception non gérée et peint une croix rouge. C'est un peu inhabituel mais nécessaire car il prend en charge la propriété ImageLocation. Ce qui lui permet d'afficher des images à partir d'une source réseau potentiellement non fiable. La meilleure façon de résoudre les exceptions dans ce cas est de déboguer + Exceptions, cochez la case Lancer. Cela force le débogueur à toujours s'arrêter sur une exception, même si elle n'est pas non gérée.

+0

Je trouve bizarre qu'il ne fasse pas la différence entre le chargement d'image échoué et les exceptions lancées dans OnPaint. – mafu

Questions connexes