Thread.Abort schieß Prozess ab

21/11/2007 - 10:29 von Martin Horst | Report spam
Hi,

ich habe hier einen Windows Dienst, welcher sich mit einem MQ Server von
IBM verbindet und Nachrichten von diesem MQ Server ließt. Das
funktioniert auch so weit so gut. Nur wenn der MQ Server nicht làuft,
bleibt die Anwendung in der Read Methode der IBM Library hàngen. Da es
keine Möglichkeit gibt, einen Timeout zu setzen, lasse ich diese Read
Methode in einem neuen Thread laufen und überwache diesen. D.h., wenn
die Read Methode nach 2 Minuten nicht zurückkehrt, wird der Thread mit
Abort abgeschossen. Das wàre für mich OK, nur wird dann auch
gleichzeitig der komplette Prozesses mit runtergerissen. Ich denke mal
das liegt daran, daß die .Net Library für den MQ Server eigentlich nur
ein Layer ist, welcher wiederum native Code aufruft. Hat jemand irgend
eine Idee, was man da evtl. noch machen könnte? Gibt es evtl. spezielle
Exception, die man gesondert abfangen muß. Der Service selber fàngt mit
einem allgemeinen catch alle auftretenden Exceptions und schreibt diese
dann in ein log. Doch dort kommt nichts an.

Danke
Martin
 

Lesen sie die antworten

#1 CKoenig
22/11/2007 - 06:13 | Warnen spam
Hallo,

Du musst im Thread, der den Read durchführt einen try/catch block (am besten
um den gesamten Code) einfügen und per
catch (ThreadAbortException)
{ /* hier kann auf Abort reagiert werden */ }
den Abort abfangen.
Allgemein solltest Du immer einen try/catch-Block in Workerthreads
verwenden, damit Fehler eben nicht den Hostprozess mit betreffen.

Gruß,
Carsten

"Martin Horst" wrote:

Hi,

ich habe hier einen Windows Dienst, welcher sich mit einem MQ Server von
IBM verbindet und Nachrichten von diesem MQ Server ließt. Das
funktioniert auch so weit so gut. Nur wenn der MQ Server nicht làuft,
bleibt die Anwendung in der Read Methode der IBM Library hàngen. Da es
keine Möglichkeit gibt, einen Timeout zu setzen, lasse ich diese Read
Methode in einem neuen Thread laufen und überwache diesen. D.h., wenn
die Read Methode nach 2 Minuten nicht zurückkehrt, wird der Thread mit
Abort abgeschossen. Das wàre für mich OK, nur wird dann auch
gleichzeitig der komplette Prozesses mit runtergerissen. Ich denke mal
das liegt daran, daß die .Net Library für den MQ Server eigentlich nur
ein Layer ist, welcher wiederum native Code aufruft. Hat jemand irgend
eine Idee, was man da evtl. noch machen könnte? Gibt es evtl. spezielle
Exception, die man gesondert abfangen muß. Der Service selber fàngt mit
einem allgemeinen catch alle auftretenden Exceptions und schreibt diese
dann in ein log. Doch dort kommt nichts an.

Danke
Martin

Ähnliche fragen