Hintergrund-Exception-Behandlung

8

Ich bin etwas verwirrt darüber, wie ich mit einer Ausnahme umgehen soll.

Ich habe einen Hintergrund-Worker-Thread, der einen lang andauernden Prozess ausführt. Mein Verständnis ist, wenn eine Ausnahme im Hintergrund Worker-Thread auftritt der Code wird immer noch bei der RunWorkerCompleted-Methode.

%Vor%

Wenn dies der Fall ist, ist es sinnvoll, einen try catch-Block um den bgWorker.RunWorkerAsync () zu setzen; Anruf, nehme ich nicht an?

Ich möchte die Ausnahme, die in der RunWorkerCompleted-Methode gefangen ist, erneut auslösen, wie kann ich dies tun, ohne den Stack-Trace zu verlieren - ist das, was ich oben richtig habe? Ich habe gelesen, dass Sie beim Auslösen einer Ausnahme einfach "werfen" verwenden sollten?

    
mHelpMe 14.12.2013, 10:41
quelle

3 Antworten

13

Ich empfehle Ihnen, eine geschäftsspezifische Ausnahme zu erstellen, die die Operation beschreibt, die Sie im Hintergrund ausgeführt haben. Und diese Ausnahme mit der ursprünglichen Ausnahme als innere Ausnahme auslösen:

%Vor%

Somit wird die originale Ausnahme mit ihrem Stack-Trace verfügbar sein, und Sie werden eine beschreibende Ausnahme geworfen haben.

Hinweis - Wenn Sie keine neue Ausnahmeklasse erstellen möchten, können Sie die vorhandene ApplicationException oder Ausnahme . Aber es ist nicht so informativ und wenn Sie es irgendwo fangen, dann werden Sie nicht in der Lage sein, diese spezielle Ausnahme nur zu fangen

    
Sergey Berezovskiy 14.12.2013, 10:58
quelle
7

Probieren Sie dies

aus %Vor%     
Jade 14.12.2013 11:00
quelle
2
  

Wenn das der Fall ist, ist es sinnvoll einen try catch Block zu setzen   um den bgWorker.RunWorkerAsync (); Anruf, nehme ich nicht an?

Nein, das geht nicht, weil bgWorker.RunWorkerAsync(); eine Methode ist (nicht an event ). Wenn Sie unter dem Visual Studio-Debugger ausgeführt werden, wird der Debugger an dem Punkt im DoWork-Ereignishandler unterbrochen, in dem die nicht behandelte Ausnahme ausgelöst wurde. So können Sie so etwas tun

%Vor%     
BRAHIM Kamel 14.12.2013 10:44
quelle