Warum App funktioniert immer noch, wenn ich es schließe.
Ich denke, es wird durch das Lesen von Daten von der seriellen Schnittstelle verursacht.
Die Nummer des seriellen Ports wird aus der ComboBox ausgewählt.
Funktion WriteData Update-Kontrollkästchen abhängig von Daten von der seriellen Schnittstelle.
Hier Extrakt:App wird nicht beendet
// Choosing of communication port from ComboBox
private void comboBoxCommunication_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (serialPort.IsOpen)
{
serialPort.DataReceived -= new System.IO.Ports.SerialDataReceivedEventHandler(Recieve);
serialPort.Close();
}
try
{
ComboBoxItem cbi = (ComboBoxItem)comboBoxKomunikacia.SelectedItem;
portCommunication = cbi.Content.ToString();
serialPort.PortName = portCommunication;
serialPort.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(Recieve);
serialPort.BaudRate = 2400;
serialPort.Open();
serialPort.DiscardInBuffer();
}
catch (IOException ex)
{
MessageBox.Show(ex.ToString(), "Error!", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
// Close the window
private void Window_Closed(object sender, EventArgs e)
{
if (serialPort.IsOpen)
{
serialPort.DataReceived -= new System.IO.Ports.SerialDataReceivedEventHandler(Recieve);
serialPort.Close();
}
}
// Data reading
private delegate void UpdateUiTextDelegate(char text);
private void Recieve(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
if (serialPort.IsOpen)
{
try
{
serialPort.DiscardInBuffer();
char c = (char)serialPort.ReadChar();
Dispatcher.Invoke(DispatcherPriority.Send,
new UpdateUiTextDelegate(WriteData), c);
}
catch(IOException ex)
{
MessageBox.Show(ex.ToString(), "Error!", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
}
// Update of checkboxes
private void WriteData(char c) { ... }
Irgendwelche anderen Themen? Können Sie überprüfen (Debugger/Logger), dass das Closed-Ereignis wie erwartet ausgeführt wird? –
Wenn das 'serialPort' Objekt wegwerfbar ist (und ich denke,' SerialPort' ist), dann besteht eine gute Chance, dass Sie es in diesem Code nicht richtig entsorgen. Möglicherweise möchten Sie es neu strukturieren, damit der Gültigkeitsbereich der Variablen besser kontrolliert wird und in einen 'using'-Block gehüllt werden kann. – David
@Henk Holterman - keine anderen Themen. App ist normal geschlossen, nur wenn ich Daten von der seriellen Schnittstelle lesen, ist es nicht richtig geschlossen. –