私は非常に奇妙な問題を抱えています。シリアルポート経由で接続されたバーコードカードリーダーを使用するWindows CE 6デバイスがあります。私はこれを処理するためにCompact Frameworkの(v2.0)SerialPort
クラスを使用しており、すべて正常に動作しています。データが以前に受信された場合、SerialPort.Open()がシステムをフリーズします(Compact Framework)
ただし、問題が1つあります。シリアルポートを開く前にカードをスワイプすると、システム全体が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
などのパケットを送信します。何か案は?前もって感謝します。
残念ながら、シリアルドライバはOEMによって提供されています。CEにはサンプルが同梱されていますが、多くの多くのOEMが旧バージョンのドライバを持っています。 – ctacke