2009-07-30 5 views
0

J'ai un GUI WPF qui a une instance d'une classe appelée Manager, qui gère essentiellement certaines fonctions de communication et de données.Comment puis-je gérer et communiquer les erreurs de bas niveau à wpf gui?

J'ai des blocs try/catch dans mon Manager, mais j'aimerais connaître la meilleure pratique pour communiquer cela à l'interface graphique. Par exemple, cliquer sur un bouton génère un événement onClick, et dans ce code j'appellerais Manager.DoProcessing(). Le problème est, comment puis-je savoir si DoProcessing bombardé? Je ne veux pas entourer l'appel de fonction avec une autre prise try ...

Serait-il suffisant pour retourner mon propre ErrorTypeenum qui identifie l'erreur:

enum ErrorType 
{ 
NoError, TimeOut, DBCorrupt 
} 

etc. Ou est-ce simpliste? Il convient d'ajouter que les appels à Manager seront filetés avec un BackgroundWorker ...

Répondre

1

Ne pas retourner les codes d'erreur. C# est meilleur que ça. Bientôt, vous aurez une méthode qui doit retourner quelque chose: et vous ne voulez pas avoir à commencer à travailler avec out paramètres. Si GetPerson ne peut pas "Obtenir" une "Personne", c'est exceptionnel, par conséquent vous devriez jeter une exception.

Votre classe Manager est-elle un ViewModel? Sinon, enveloppez-en un. Votre viewmodel devrait catch l'exception (quel que soit le fil sur lequel il se produit), et prendre la responsabilité de le présenter à la vue. Une option consiste à créer une ObservableCollection de ErrorMessages (ou des chaînes, mais j'écrirais une classe ErrorMessage avec le message, la gravité, le temps d'occurrence, etc.). Ensuite, votre XAML peut lier directement à cela. Chaque fois que votre bloc catch ajoute un ErrorMessage à la collection, votre vue se met à jour automatiquement.

Si vous utilisez un BackgroundWorker, vous devrez peut-être vérifier les exceptions dans l'événement RunWorkerCompleted au lieu d'utiliser un bloc 'catch'. This documentation explains how.

Questions connexes