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.
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: Ссылка
Hinzufügen der folgenden zu app.config
%Vor%hat für mich gearbeitet. Siehe Problem mit SerialPort
(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%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.
Tags und Links .net .net-4.0 exception-handling serial-port