2009-02-12 9 views
0

Comment intercepter une exception NotImplementedException dans une application WPF?Comment intercepter une exception NotImplementedException dans une application WPF?

Je vais de temps en temps jeter un NotImplementedException tout en testant mon en cours application WPF:

Private Sub ButtonDoSomething_Click(...) Handles ButtonDoSomething.Click 
    Throw New NotImplementedException(_ 
     "ButtonDoSomething_Click() not implemented.") 
End Sub 

Mais, je préfère ne plantera pas ce programme.

je pouvais remplacer toutes ces exceptions lancers francs avec:

MessageBox.Show("ButtonDoSomething_Click() not implemented.", _ 
    "Not Implemented", MessageBoxButton.OK, MessageBoxImage.Information) 

Mais cela semble inellegant en quelque sorte et ne fonctionnerait pas si le NotImplementedException a été enterré loin de l'interface.

Comment puis-je capturer toutes ces exceptions et afficher un message?

Répondre

6

Vous pouvez attacher à l'événement DispatcherUnhandledException sur la classe Application, qui sera levée chaque fois qu'une exception non gérée se produit. Dans là, vous pouvez vérifier la propriété Exception sur l'instance DispatcherUnhandledExceptionEventArgs transmise au gestionnaire d'événements pour voir si elle est de type NotImplementedException. Si c'est le cas, définissez la propriété Handled sur true, puis revenez.

Il est à noter que si vous appeliez MsgBox au lieu de lancer l'exception, vous auriez le problème de devoir retourner quelque chose et de définir tous les paramètres out/ref, ce qui aurait été un surcoût supplémentaire.

3

Jetez un coup d'œil à Application.DispatcherUnhandledException ou AppDomain.UnhandledException. Les deux vous permettent de gérer des exceptions non gérées.

+0

vrai, AppDomain.UnhandledException est un événement qui est soulevée par l'AppDomain lorsqu'il détecte une exception non gérée. Peu importe ce que vous faites, l'application va s'arrêter juste après. –

0

Au lieu de jeter un NotImplementedException ou en utilisant un MessageBox, vous pouvez utiliser Debug.Fail. Par exemple:

Debug.Fail("This method is not implemented yet!"); 

Une boîte de message s'affiche avec le texte que vous fournissez et affiche la trace de la pile. Cependant,

Questions connexes