Laden...

Probleme mit SafeHandle von serialport modul über usb

Erstellt von H2SO4 vor 16 Jahren Letzter Beitrag vor 13 Jahren 12.030 Views
H
H2SO4 Themenstarter:in
209 Beiträge seit 2007
vor 16 Jahren
Probleme mit SafeHandle von serialport modul über usb

hallo, ich habe zwei messgeräte an einem pc die beide über seriellen Port kommunizieren. Da es ja nur einen seriellen port gibt, haben wir ein adabter auf usb genommen und das zweite gerät an einen usb port angeschlossen. Klappt an sich auch wunderbar, jedoch nach einer weile scheint es so als würde sich der usb abmelden oder irgendwas anderes, auf jedenfall bekommen wir folgende fehlermeldung

System.ObjectDisposedException wurde nicht behandelt.
Message="Das SafeHandle wurde geschlossen."
Source="System"
ObjectName=""
StackTrace:
bei Microsoft.Win32.UnsafeNativeMethods.GetOverlappedResult(SafeFileHandle hFile, NativeOverlapped* lpOverlapped, Int32& lpNumberOfBytesTransferred, Boolean bWait)
bei System.IO.Ports.SerialStream.EventLoopRunner.WaitForCommEvent()
bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
bei System.Threading.ThreadHelper.ThreadStart()

Kann jemand was damit anfangen? Leider findet man zu diesem Thema recht wenig und nicht wirklich was brauchbares

B
114 Beiträge seit 2007
vor 16 Jahren

Ich würde das gerne noch einmal nach oben bringen da ich gerade den gleichen Fehler bekomme. Wir haben ebenfalls ein über USB angeschlossenes Serial-Modul, das bisher auch wunderbar funktionierte. Ich programmiere gerade eine Fehlerbehandlung falls das Modul während dem Zugriff herausgezogen wird. In diesem Fall wird eine Fehlermeldung ausgegeben und die Erkennung erneut gestartet. Dies Funktioniert auch meistens, ab und zu kommt aber die ObjectDisposedException mit folgenden Details:

System.ObjectDisposedException wurde nicht behandelt.
Message="Das SafeHandle wurde geschlossen."
Source="System"
ObjectName=""
StackTrace:
bei Microsoft.Win32.UnsafeNativeMethods.WaitCommEvent(SafeFileHandle hFile, Int32& lpEvtMask, NativeOverlapped* lpOverlapped)
bei System.IO.Ports.SerialStream.EventLoopRunner.WaitForCommEvent()
bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
bei System.Threading.ThreadHelper.ThreadStart()

S
8.746 Beiträge seit 2005
vor 16 Jahren

Die normale SerialPort-Klasse hat keine Sonderbehandlung von COM-Ports, die "verschwinden" (Herausziehen des USB-Adapters). Hier bleibt nur die Exception zu fangen und entsprechend zu behandeln.

87 Beiträge seit 2009
vor 14 Jahren

hey,

ich bekomme die gleiche Fehlermeldung, PLUS selbst wenn ich die Exception abfange und zwar mit IOException (normale Exception - Exception ex bspw. - funktioniert nicht) beendet sich meine Anwendung. Vlt. hat in der Zwischenzeit ja jemand ne lösung gefunden???

mfg
mex

que? como? no entiendo!!!!!

888 Beiträge seit 2007
vor 14 Jahren

Die Lösung ist: Weg von USB, hin zu native RS232.

87 Beiträge seit 2009
vor 14 Jahren

und wenn das nicht möglich ist, da das angeschlossene zu verwendende Gerät nur mit USB-Anschluss erhältlich ist!

que? como? no entiendo!!!!!

888 Beiträge seit 2007
vor 14 Jahren

Dann wird es mit der SerialPort-Klasse nicht zu lösen sein.

87 Beiträge seit 2009
vor 14 Jahren

damit ich das jetzt endgültig richtig verstanden habe, es kennt niemand einen Lösungsansatz bzgl. des Exception Handlings um dieses Problem in den Griff zu bekommen!?

que? como? no entiendo!!!!!

S
8.746 Beiträge seit 2005
vor 14 Jahren

Wo ist das Problem? Wenn du eine IOException bekommst fängst du das Teil ab und gehst davon aus, dass der Port weg ist.

87 Beiträge seit 2009
vor 14 Jahren

hier liegt das problem:

... selbst wenn ich die Exception abfange und zwar mit IOException (normale Exception - Exception ex bspw. - funktioniert nicht) beendet sich meine Anwendung...

egal welche ex ich fange, die anwendung beendet sich!!!!!

que? como? no entiendo!!!!!

M
334 Beiträge seit 2007
vor 14 Jahren

probier mal, ob du mit Application.ThreadException die Ausnahme fangen und behandeln kannst.

D
201 Beiträge seit 2007
vor 14 Jahren

Hallo,

hat dieses Problem mittlwerweile jemand gelöst?
Ich hab nämlcih das gleiche Problem in einer .net2.0-Anwendung, die auch die SerialPort-Klasse nutzt.
Mit Application.ThreadException läßt sie sich bei mir auch nicht fangen. Ich bekomme lediglich in AppDomain.CurrentDomain.UnhandledException mit das die Ausnahme auftritt, aber dann schmiert die Anwendung ab, ohne dass ich es verhindern kann.

Weiß jemand Rat?

R
1 Beiträge seit 2006
vor 13 Jahren

Hallo,

ich hatte jetzt das selbe Problem, und vielleicht kann jemand etwas mit der Lösung anfangen, aber ich weiß nicht, ob das Augangsproblem dasselbe wie meins war. Ich habe einen Thread, in dem immer über die SerialPort-Klasse von der seriellen Schnittstelle gelesen wird (über einen USB-Adapter). Verschwindet der Port, gibt es eine IOException, welche in dem lesenden Thread abgefangen werden muss.
Der SerialPort darf auch nicht von außen geschlossen werden, sondern nur in dem Thread selbst: klick.

Hoffentlich helfen diese Anregungen jemandem.