Uniwersalne wyjątki i ProgessBar

0

Witam. Pierwszym problemem jest łapanie wyjątków z całego programu. Oczywiście uprzedzam pytanie, program jest należycie zabezpieczony, ale ktoś zawsze może coś wyłapać. Znalazłem już zdarzenie Application.ThreadException, ale nie potrafię tego należycie wykorzystać. Próbuję zrobić to jak normalne zdarzeniem jak np. Click, więc

Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Metoda())

i tworzę odpowiednią metodę, w której prawidłowo wysyłam dokładne dane o wyjątku na serwer i wyświetlam komunikat. Program się kompiluje. Rzucam więc pod button throw new NullReferenceException(), ale zdarzenie ThreadException nie jest wywoływane(sprawdzałem w Step Into(F11)), tylko od razu wyrzuca bug. Dlaczego?

Druga sprawa. Mój program sporo plików wysyła przez FTP na serwer. Same pliki nie są duże, ale mimo wszystko wysyłanie trwa ok.2-3 sekund, podczas których program nie odpowiada. Wysyłanie następuje również przed uruchomieniem, co powoduje, że formę widać po 2-3 sek po uruchomieniu. Chciałbym więc wyświetlać coś w stylu MessageBox'a z napisem Trwa wysyłanie... i ProgressBar'em jak myślę. Tylko jak go użyć. Na MSDN nie znalazłem konkretnego przykładu, tam jest tylko na przykładzie pętli, a tu nie mam pętli, tylko jedną linię kodu, która wykonuje się dłużej. Da się zrobić?

0

Nie wiem czy to dobry pomysł, ale działa jak należy, użyłem BackgroundWorker i użytkownik "nie czuje" wysyłania.

Tylko co jeszcze z tymi wyjątkami?

0
blazej30 napisał(a)

Witam. Pierwszym problemem jest łapanie wyjątków z całego programu. Oczywiście uprzedzam pytanie, program jest należycie zabezpieczony, ale ktoś zawsze może coś wyłapać. Znalazłem już zdarzenie Application.ThreadException, ale nie potrafię tego należycie wykorzystać. Próbuję zrobić to jak normalne zdarzeniem jak np. Click, więc

Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Metoda())

i tworzę odpowiednią metodę, w której prawidłowo wysyłam dokładne dane o wyjątku na serwer i wyświetlam komunikat. Program się kompiluje. Rzucam więc pod button throw new NullReferenceException(), ale zdarzenie ThreadException nie jest wywoływane(sprawdzałem w Step Into(F11)), tylko od razu wyrzuca bug. Dlaczego?

Druga sprawa. Mój program sporo plików wysyła przez FTP na serwer. Same pliki nie są duże, ale mimo wszystko wysyłanie trwa ok.2-3 sekund, podczas których program nie odpowiada. Wysyłanie następuje również przed uruchomieniem, co powoduje, że formę widać po 2-3 sek po uruchomieniu. Chciałbym więc wyświetlać coś w stylu MessageBox'a z napisem Trwa wysyłanie... i ProgressBar'em jak myślę. Tylko jak go użyć. Na MSDN nie znalazłem konkretnego przykładu, tam jest tylko na przykładzie pętli, a tu nie mam pętli, tylko jedną linię kodu, która wykonuje się dłużej. Da się zrobić?

Co do zdarzenia, niestety jeszcze się z nim nie spotkalem, ale jak znajdziesz solucję, z checią przeczytam.
Obejściem jest zbudowanie bloku try/catch w głównej metodzie programu static void Main(string[] args).

1 użytkowników online, w tym zalogowanych: 0, gości: 1