Ich verwende eine .net SerialPort
als Eigenschaft in einer Klasse für die Kommunikation mit einiger Hardware. Wenn ich das Programm schließe, muss ich einen Stop-Befehl senden, bevor ich die Verbindung schließe.SerialPort-Eigenschaft wird geschlossen, wenn Klassendeconstructor ausgelöst wird
Ich dachte, dass der eleganteste Weg wäre, dies in meinem Dekonstruktor der Klasse zu tun, die ich geschrieben habe, aber ich musste herausfinden, dass meine SerialPort
zu der Zeit geschlossen ist, als der Entscheider entlassen wurde und nicht wieder geöffnet werden kann.
Hier ist eine Testklasse I schrieb, die die gleichen Fehler produziert:
public class SerialPortTestClass
{
private System.IO.Ports.SerialPort ComPort { get; set; }
public SerialPortTestClass()
{
ComPort = new System.IO.Ports.SerialPort
{
BaudRate = 38400,
StopBits = System.IO.Ports.StopBits.One,
NewLine = ((char)19).ToString(),
Parity = System.IO.Ports.Parity.None,
Handshake = System.IO.Ports.Handshake.None,
RtsEnable = false,
ReadBufferSize = 512,
ReadTimeout = 5000,
ReceivedBytesThreshold = 1
};
}
public void Connect(string port)
{
ComPort.PortName = port;
ComPort.Open();
}
public void Disconnect()
{
var bytes = new byte[] { 83, 80, 32, 115, 54, 19 };
ComPort.Write(bytes, 0, bytes.Length);
ComPort.Close();
}
~SerialPortTestClass()
{
if (ComPort.IsOpen)
Disconnect();
}
}
Hat jemand eine Idee, warum der Serialport geschlossen ist und wie dieses Verhalten zu beheben?
Das hat nichts zu tun mit der seriellen Schnittstelle, die folgende Methode Ihre MainWindow.xaml.cs das Hinzufügen würde. Dies liegt daran, dass der Destruktor beim Herunterfahren nicht aufgerufen wird. Um das zu lösen, muss man wissen, wie man die Klasse ausführt. Eine Konsolenanwendung? Internetanwendung? – fhogberg
Die Klasse ist Teil einer WPF-Desktop-Anwendung. – dukemadcat