Hallo zusammen,
bin relativer Anfänger/Einsteiger und ich kämpfe in einer Anwendung schon länger mit der oben genannten Exception:
"System.UnauthorizedAccessException wurde nicht behandelt"
beim beenden eines WinForm Programmes über Application.Exit() und lässt sich auch nicht über try/catch an keiner Stelle abfangen.
Dies geschieht allerdings nur dadurch oder in dem Fall wenn vorher eine ganz normal über
C#-Quelltext
1:
| SerialPort serialPort = new SerialPort() |
erstellte und mit
C#-Quelltext
1: 2: 3: 4: 5: 6:
| serialPort.BaudRate = baudRate; serialPort.DataBits = dataBits; serialPort.StopBits = stopBits; serialPort.Parity = parity; serialPort.PortName = portName; serialPort.Open() |
geöffnete Schnittstelle und Datenverbindung (virtuellen COM-Port über USB) extern getrennt (abziehen USB oder Netz aus) wird. Vorher wird diese mit serialPort.Close() natürlich geschlossen, nach Abfrage über IsOpen.
Das ist alles eigentlich kein Problem.
Dazu kommt aber das die Schnittstelle über
C#-Quelltext
1:
| serialPort.DataReceived -= new SerialDataReceivedEventHandler(OnPort_DataReceived); |
und etwa wie in
www.codeproject.com/...m/DriveDetector.aspx beschrieben
überwacht wird. Dazu wir WndProc überschrieben.
In dieser Funktion landet beim debuggen das Programm mehrfach
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| protected override void WndProc(ref Message m) { base.WndProc(ref m); try { if (mDetector != null) { mDetector.WndProc(ref m); }
} catch (InvalidCastException ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop);
} } |
aber nie in try{}! und dann ohne Exception auf der letzten geschweiften Klammer in der class main,
danach kommt dann die oben genannte Exception. Komplette Meldung für die Zwischenablage lautet:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| "System.UnauthorizedAccessException wurde nicht behandelt. Message="Der Zugriff auf den Anschluss wurde verweigert." Source="System" StackTrace: bei System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str) bei System.IO.Ports.InternalResources.WinIOError() bei System.IO.Ports.SerialStream.Dispose(Boolean disposing) bei System.IO.Ports.SerialStream.Finalize() InnerException: |
Wird das Programm normal ohne externe Unterbrechung geschlossen kommt keine Exception.
Windows hat da trotz serial.Port.Close() offensichtlich irgendwelche Probleme die zu diesem Absturz führen.
Vor dem Close habe ich auch schon
C#-Quelltext
1:
| serialPort.DataReceived -= new SerialDataReceivedEventHandler(OnPort_DataReceived); |
u.a. probiert. Was könnte ich da noch machen, um das zu verhindern?
Kann das Programm so keinem übergeben, obwohl sonst alles richtig tut!
Danke für jede Hilfe!
Steffen
Moderiert von
Th69: C#-Tags hinzugefügt