2009-07-30 2 views
0

Ich habe eine WPF GUI, die eine Instanz einer Klasse namens Manager hat, die im Wesentlichen bestimmte Kommunikations- und Datenfunktionen verwaltet.Wie kann ich Low-Level-Fehler mit wpf gui umgehen?

Ich habe versuchen/catch-Blöcke in meinem Manager, aber ich würde gerne die beste Praxis kennen, um dies an die GUI zu kommunizieren.

Zum Beispiel erzeugt ein Klick auf eine Schaltfläche ein onClick Ereignis, und in diesem Code würde ich Manager.DoProcessing() anrufen. Das Problem ist, wie kann ich wissen, ob DoProcessing ausgebombt wurde? Ich möchte nicht den Funktionsaufruf mit einem anderen Versuch fangen umgeben ...

Wäre es ausreichend sein, meine eigene ErrorTypeenum zurückzukehren, die den Fehler identifiziert:

enum ErrorType 
{ 
NoError, TimeOut, DBCorrupt 
} 

usw. Oder ist dies stark vereinfacht? Es sollte hinzugefügt werden, dass die Aufrufe an Manager mit einem BackgroundWorker ...

Antwort

1

Gewinde sein werden, geben Sie keine Fehlercodes zurück. C# ist besser als das. Ziemlich bald wirst du eine Methode haben, die etwas zurückgeben muss: und du willst nicht mit out Parametern arbeiten müssen. Wenn GetPerson eine "Person" nicht "holen" kann, ist das Exceptional, daher sollten Sie eine Ausnahme auslösen.

Ist Ihre Manager-Klasse ein ViewModel? Wenn nicht, wickeln Sie es in einen. Ihr Ansichtsmodell sollte catch die Ausnahme (unabhängig davon, an welchem ​​Thread es auftritt) und die Verantwortung dafür übernehmen, es der Ansicht zu präsentieren. Eine Option ist das Erstellen einer ObservableCollection von ErrorMessages (oder Strings, aber ich würde eine ErrorMessage-Klasse mit Nachricht, Schweregrad, Zeit des Auftretens usw. schreiben). Dann kann Ihr XAML direkt daran binden. Wenn Ihr catch-Block der Sammlung eine ErrorMessage hinzufügt, wird Ihre Ansicht automatisch aktualisiert.

Wenn Sie einen BackgroundWorker verwenden, müssen Sie möglicherweise im RunWorkerCompleted-Ereignis nach Ausnahmen suchen, anstatt einen Fangblock zu verwenden. This documentation explains how.