Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Cyril Sansus

WPF, Interfaces Utilisateurs et .NET
[Windows Mobile] Afficher une fenêtre lors d’une exception non gérée

Personne n’est à l’abri d’une exception non gérée, c’est à dire une exception que vous n’avez pas “catché” et qui fait planter méchamment votre application. Heureusement il est possible de détecter ce type de plantage et d’afficher une fenêtre.

Pour récupérer les exceptions non gérées, vous devez utiliser l’évènement UnhandledException comme suivant (d’ailleurs cela devrait être la première instruction de la plupart des applications .NET) :

AppDomain.CurrentDomain.UnhandledException += 
                                    CurrentDomain_UnhandledException;

Ensuite, il est possible d’y afficher une fenêtre afin d’informer l’utilisateur qu’une erreur est survenue.

static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    using (ErrorForm form = new ErrorForm(e.ExceptionObject as Exception))
    {
        form.ShowDialog();
    }
}

Problème le code-ci dessous ne vous affichera pas la fenêtre !? En effet la méthode ShowDialog retournera directement DialogResult.None.

En fait, l’état plutôt instable de l’application lors d’une exception non gérée fait que votre fenêtre peut recevoir des messages erronées depuis la boucle de messages Win32.

Pour palier ce problème vous pouvez utiliser la méthode Application.DoEvents() comme le montre le code suivant :

static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    Application.DoEvents();
 
    using (ErrorForm form = new ErrorForm(e.ExceptionObject as Exception))
    {
        form.ShowDialog();
    }
}

Et voilà : ca marche !

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: jeudi 3 décembre 2009 18:14 par Vko
Classé sous :

Commentaires

patrice a dit :

Question bête, en quoi le DoEvents permet de ne plus recevoir de message erronés ??

# décembre 4, 2009 10:12

Vko a dit :

DoEvents permet de gérer les messages en attentes dans la pile de message du système.

Donc en l'appelant on s'assure que les messages en attentes ont été traité.

J'en donc supposé que la problématique venait des messages reçus par la fenêtre.

A partir de là j'ai voulu voir les différents messages qui transitait, et donc il a fallut récupérer les messages à l'aide de la fonction win32 SetWindowLong en lui fournissant une nouvelle WinProc.

Exemple :

SetWindowLong(Handle, GWL_WNDPROC, new WndProcDelegate(WndProc));

On remarque que lorsqu'on ne fait pas de DoEvents, la fenetre recoit le message suivant :

MSG: 0x7D WPARAM: -20 LPARAM: 470021512

qui correspond à un changement de style. La callstack ne permet pas d'avoir plus de détails car le code est en natif.

A noter que cet évènement n'est pas envoyé lorsqu'on fait un DoEvents.

J'avoue que par manque de temps je n'ai pas poussé plus en avant mes investigations car autant en managé c'est très simple de remonter un problème, autant en natif c'est une autre chose.

# décembre 4, 2009 16:31
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- [SharePoint] Les sessions TechDays 2012… par Le blog de Patrick [MVP SharePoint] le il y a 6 heures et 37 minutes

- TechDays Paris 2012 : Session pleinière jour 3 par Blog Technique de Romelard Fabrice le 02-09-2012, 11:01

- Mishra Reader : un lecteur RSS très Zune Style en Open Source ! par Cyril Sansus le 02-09-2012, 08:28

- [framework 4] Les Tasks et le Thread UI par Fathi Bellahcene le 02-09-2012, 00:33

- Workflow Foundation 3 a un pied dans la tombe par Blog de Jérémy Jeanson le 02-08-2012, 22:15

- TechDays Paris 2012 : Nouvelles tendances du poste de travail - Bring Your own PC par Blog Technique de Romelard Fabrice le 02-08-2012, 19:42

- TechDays Paris 2012 : System Center Service Manager 2012 Vue d’ensemble par Blog Technique de Romelard Fabrice le 02-08-2012, 17:32

- TechDays Paris 2012 : Pleinière second jour par Blog Technique de Romelard Fabrice le 02-08-2012, 16:23

- TechDays Paris 2012 : Retour d'expérience sur la mise en place d'un Cloud Privé par Blog Technique de Romelard Fabrice le 02-08-2012, 16:04

- TechDays Paris 2012 : Comment SharePoint a sauvé mes TechDays par Blog Technique de Romelard Fabrice le 02-07-2012, 23:59