Winbot – nieobsłużone wyjątki w WPF

Ostatni tydzień nie przyniósł żadnych rewolucyjnych zmian do aplikacji Winbot, którą rozwijam już jakieś 10 tygodni 🙂 Pracuję nad nową funkcją, która pozwoli na tworzenie nowych scenariuszy ręcznie (bez nagrywania aktywności myszki lub klawiatury). Postanowiłem to wprowadzić aby była możliwość tworzenia zagregowanych scenariuszy lub też bardziej generycznych (np. scenariusz, który wykonuje inny scenariusz przez godzinę). Ale narazie to zostawmy – jeszcze nie jest gotowe, więc nie ma się czym chwalić. W dzisiejszym poście opiszę prosty sposób, jaki ostatnio zastosowałem aby obsłużyć wyjątki w aplikacji WPF.

Zdarza się, że w trakcie działania naszej aplikacji desktopowej zostanie wyrzucony błąd, którego w ogóle się nie spodziewaliśmy. Jeżeli nie zabezpieczyliśmy odpowiednio naszego kodu – aplikacja wyłączy się. Może być to bardzo uciążliwe zarówno dla użytkownika jak i programisty. Eleganckim rozwiązaniem byłoby globalne „łapanie” wszystkich nieobsłużonych wyjątków i wykonanie konkretnej akcji, np. wyświetlenie okienka z informacją dla użytkownika i zalogowanie zdarzenia. Jak to zrobić w WPF?

Ja postanowiłem skorzystać w popularnej biblioteki służącej do logowania log4net. Najlepiej zainstalować za pomocą nugeta.

Następnie należy odpowiednio skonfigurować naszego loggera. Tutaj mamy mnóstwo możliwości. Jeżeli potrzebujesz czegoś bardzo wyrafinowanego – zajrzyj do dokumentacji, tam na pewno znajdziesz odpowiedź. Zastosowałem raczej prostą, standardową konfigurację.

Żeby móc używać loggera musimy go najpierw zainicjalizować. Można to zrobić w kodzie źródłowym lub wstawić odpowiedni wpis do pliku AssemblyInfo.cs. Moim zdaniem drugie podejście jest bardziej eleganckie, bo nie zaśmieca nam kodu. Oto wpis który trzeba dodać:

Teraz możemy działać. Najlepiej chyba utworzyć jedną instancję loggera, która będzie wykorzystywana w całej aplikacji.

Przyszła kolej na obsługę wyjątków. Aplikacja WPF dostarcza nam szereg eventów, pod które możemy się podpiąć aby przechwycić nieobsłużone wyjątki. Zazwyczaj wystarczy skorzystać z dwóch eventów. Zaleca się aby zrobić to zaraz na starcie w pliku App.xaml.cs.

I tak to właśnie wygląda. Cały projekt jak zwykle dostępny jest w repozytorium. Jeżeli coś jest nie wystarczająco jasne lub wiesz, że można to zrobić lepiej – zachęcam do kontaktu lub komentowania!

Dodaj komentarz

Twój adres email nie będzie opublikowany. Pola wymagane zostały oznaczone *