Ich habe ein sehr merkwürdiges Problem hier, vielleicht können Sie mir helfen. Ich habe ein Windows CE 6-Gerät, das einen Barcode-Kartenleser verwendet, der über eine serielle Schnittstelle angeschlossen ist. Ich benutze die Compact Framework (v2.0) SerialPort
Klasse, um damit umzugehen, und alles hat gut funktioniert.SerialPort.Open() friert das System ein, wenn Daten zuvor empfangen wurden (Compact Framework)
Es gibt jedoch ein Problem. Wenn eine Karte zu irgendeinem Zeitpunkt übersprungen wird, bevor die serielle Schnittstelle geöffnet wird, bleibt das gesamte System beim Aufruf Open()
hängen. Keine Ausnahmen, keine Warnungen, nur ein kompletter System-Freeze ohne Grund. Ich habe versucht, die Puffer vor dem Öffnen des Ports zu löschen, aber anscheinend kann diese Methode nur verwendet werden, nachdem der Port geöffnet wurde, weil ich eine InvalidOperationException
bekam.
Ich machte eine vereinfachte Version des Codes, um zu sehen, ob die Komplexität etwas damit zu tun hatte, aber ein einfaches Formular mit einer Schaltfläche, die den Port öffnet, wird auf die gleiche Weise einfrieren. Hier ist der vereinfachte Code:
private void btConnect_Click(object sender, EventArgs e)
{
try
{
this.serialPort = new SerialPort(this.txName.Text, Convert.ToInt32(this.txBaud.Text));
this.serialPort.RtsEnable = this.chRTS.Checked;
this.serialPort.Open(); //it freezes here
this.btConnect.Text = "Disconnect";
this.txName.Enabled = false;
this.txBaud.Enabled = false;
this.chRTS.Enabled = false;
}
catch
{
MessageBox.Show("Failed to open port. Please check your settings and try again.", "Operation failed", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1);
}
}
Ich kann nicht sehen, was ich falsch mache, ich fange an zu glauben, dass es ein Fehler in dem kompakten Rahmen ist. Der Kartenleser sendet Pakete wie F03030DKD03003\r\n
. Irgendwelche Ideen? Danke im Voraus.
Leider eine schlechte Annahme - der serielle Treiber wird vom OEM zur Verfügung gestellt - sicher CE wird mit einem Muster geliefert, aber viele, viele OEMs bringen nur ihre alten Treiber von früheren Versionen mit. – ctacke