Problem mit ComPort

ciubic

Mitglied
Hallo

Ich habe einen total komischen Fehler bezüglich eines ComPorts

.net C#

Es handelt sich dabei um einen kleinen Teil einer ziemlich großen Anwendung somit ist es schwer Code zu posten!

Also ich beschreibe den Ablauf mal:

Es starten eine Anwendung … es starten Form … dann startet ein spezielles Form in diesem Form,
wird zuerst ein Thread gestartet der eine neu Instanz einer Klasse erstellt.

Danach springt der Thread in eine Endlosschleife und sendet immer einen speziellen Befehl an den SerialPort, nach erfolgreichem Senden wird auf die Antwort der Hardware gewartet diese Antwortet besteht aus speziellen Bytes welche ausgelesen und zusammengesetzt werden.
Sind alle Bytes zusammengesetzt werden die empfangenen Daten an einen anderen Thread übergeben, danach wird das Senden wieder Freigegeben und der Thread der sich immer noch in der Endlosschleife befindet, sendet nun erneut eine Befehl an die Hardware.

Dies läuft endlos so weiter, funktioniert perfekt ohne Fehler.

Die empfangenen Daten werden von einem anderen Thread in einer Datenbank gesucht, wird eine Übereinstimmung gefunden, wird dieses Form geschlossen. Auch ohne Probleme

Wird jedoch dieses Form erneut Gestartet Bekomme ich diesen Fehler beim ausführen von com.open(); :
Code:
System.UnauthorizedAccessException wurde nicht behandelt.
    Message="Der Zugriff auf den Anschluss COM8 wurde verweigert."
    Source="System"
    StackTrace:
         bei System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str)
         bei System.IO.Ports.SerialStream..ctor(String portName, Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeout, Handshake handshake, Boolean dtrEnable, Boolean rtsEnable, Boolean discardNull, Byte parityReplace)
         bei System.IO.Ports.SerialPort.Open()
         bei rfid..ctor(String Com_Port, TextBox binary_box, TextBox hex_box, TextBox serial_number_box, login_form ref_login_form) in G:\PROGRAMMING\MIXOMATIC_V2\mix-app-2\mix-app-2\system\class\rfid\rfid.cs:Zeile 51.
         bei mix_app_2.Forms.login_form.thread_starter() in G:\PROGRAMMING\MIXOMATIC_V2\mix-app-2\mix-app-2\Forms\login_form.cs:Zeile 65.
         bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
         bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
         bei System.Threading.ThreadHelper.ThreadStart()




Was ich glaube das Problem könnte darin liegen das ich den ComPort beim beenden des Forms nicht Schließe.

Das schließen ist nicht so einfach da der Comport von einem anderen Thread geöffnet wurde.
Um dies zu lösen übergebe ich anfangs eine Referenz zu dem geöffneten ComPort.

Danach sollte es ja möglich sein den Comport zu schließen.

NEIN ist es nicht wenn ich com.close(); ausführe bleibt die Anwendung einfach stehen, der Debugger jedoch sagt kein Wort nur RUNNIG!!

Ich muss ehrlich sagen schön langsam verzweifle ich!

Lg
Julian Nischler
 
Servus,

ich würde um solche Probleme zu vermeiden, nur einen Thread benutzen, der auf dem Port liest und ihn wieder schließt.

Du musst auch daran denken, die Threads wieder zu schließen.
 

Neue Beiträge

Zurück