.NET 4 Serial Port ObjectDisposedException nur unter Windows 7

8

Dies ist ein Problem, das ich die ganze Zeit mit der seriellen Port-Klasse in .NET 2.0 hatte. Es wurde vorgeschlagen, dass ein Upgrade auf .NET 4 das Problem beheben würde ... und dies in fast allen Fällen.

Wenn ich die in .NET integrierte serielle Schnittstelle für die Kommunikation mit einem USB-zu-Seriell-Adapter verwende und der Adapter unerwartet getrennt wird, während der Port geöffnet ist, erhalte ich gelegentlich eine unbehandelte Ausnahme:

%Vor%

Auch in den meisten Fällen funktioniert es gut. Tatsächlich kann ich das Problem nicht einmal auf meinen eigenen Computern reproduzieren. Das passiert einem Freund von mir. Gibt es überhaupt eine Möglichkeit, diesen Fehler zu fangen?

Bearbeiten: Ich konnte das Verhalten selbst reproduzieren. Ich experimentiere jetzt, aber bin immer noch ratlos, was diesen Fehler in .NET 4.0 verursacht.

Edit 2: Das scheint nur unter Windows 7 zu passieren. Das Trennen und Anschließen des USB-zu-Seriell-Adapters auf XP funktioniert wunderbar.

    
Brad 28.09.2010, 00:34
quelle

4 Antworten

5

Es scheint, dass dieser Bug in nächster Zeit nicht von Microsoft behoben wird und dass es keine gute Problemumgehung gibt. Ich habe über ein Jahr damit verbracht, an diesem Problem zu arbeiten.

Die Lösung für mich bestand darin, eine Komponente von Drittanbietern zu verwenden. Nach dem Testen von 15+ habe ich festgestellt, dass das einzige, was wirklich funktioniert, CommStudio ist.

Die kostenlose Express-Version ist hier: Ссылка

    
Brad 04.11.2011, 01:15
quelle
4

Hinzufügen der folgenden zu app.config

%Vor%

hat für mich gearbeitet. Siehe Problem mit SerialPort

    
Justin Wignall 31.01.2011 11:09
quelle
1

(Ich weiß, dass dies eine zwei Jahre alte Frage ist, aber es sieht so aus, als sei das Problem immer noch relevant, also poste ich etwas Code, den ich gefunden habe und den ich für nützlich halten könnte.)

Ich hatte ein ähnliches Problem in einem .NET 2.0 VB-Projekt. Beim Trennen eines USB-zu-Seriell-Adapters würde ich oft eine "UnauthorizedAccessException" bekommen, die das Programm zum Absturz brachte.

Ich hatte dieses Projekt noch nicht auf .NET 4.x portieren können. Außerdem verstehe ich, dass die Ausnahme, die ich gesehen habe, nicht dieselbe ist wie die vom OP erwähnte, aber ich denke, dass das zugrundeliegende Problem dasselbe sein könnte, also möchte ich eine Lösung teilen, die ich gefunden habe.

Ссылка

Der Code unten auf dieser Seite hat das Problem für mich gelöst. Hier ist die tatsächliche VB.NET-Klasse, die ich verwendet habe:

%Vor%     
Marcello Romani 08.05.2013 06:59
quelle
1

Ich hatte auch dieses Problem, aber ich fand eine .NET-Bibliothek, die ein Faulted-Ereignis auslöst, wenn der Adapter getrennt wird und danach die Verbindung normal getrennt wird. Sie können die Verbindung jederzeit wiederherstellen, wenn der Adapter wieder angeschlossen ist. Der Name der Bibliothek lautet ZylSerialPort.NET.

    
Zilord 12.05.2016 14:46
quelle