У меня здесь очень странная проблема, может быть, вы, ребята, можете мне помочь. У меня есть устройство Windows CE 6, в котором используется устройство считывания карт со штрих-кодом, подключенное через последовательный порт. Я использую класс Compact Framework (v2.0) SerialPort
, чтобы справиться с этим, и все работает нормально.
Однако есть одна проблема. Если в любой момент карта была проведена до открытия последовательного порта, вся система зависает при вызове Open()
. Никаких исключений, никаких предупреждений, просто полное зависание системы без всякой причины. Я пытался очистить буферы перед открытием порта, но, видимо, этот метод можно использовать только после открытия порта, потому что я получил InvalidOperationException
.
Я сделал упрощенную версию кода, чтобы посмотреть, имеет ли сложность какое-либо отношение к нему, но простая форма с кнопкой, открывающей порт, замерзнет точно так же. Вот упрощенный код:
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);
}
}
Я не вижу, что я делаю неправильно, я начинаю думать, что это ошибка в компактной среде. Устройство чтения карт отправляет пакеты, такие как F03030DKD03003\r\n
. Есть идеи? Заранее спасибо.