シリアル ポートからデータを読み取るコードを次に示します。物事を単純にするために、ボタンのクリックでそれを行いましょう。
private System.IO.Ports.SerialPort serialPort;
private void button1_Click(object sender, EventArgs e)
{
if (serialPort == null)
serialPort = new SerialPort("COM7", 4800, Parity.None, 8, StopBits.One);
//COM7 is hard coded just for the sake of example
if (!serialPort.IsOpen)
serialPort.Open();
textBox1.AppendText(serialPort.ReadExisting());
}
私のラップトップがスリープ状態にならない限り、コードは完全に正常に動作します。システムがスリープから復帰すると、serialPort
オブジェクトは返されnull
ず、 「要求されたリソースは使用中です」というエラーが表示されます。通話中。内部例外には何もありません。serialPort.IsOpen
false
serialPort.Open()
オブジェクトを閉じる、破棄する、明示的にnullに割り当てて再初期化するなど、オブジェクトで多くのことを試しましserialPort
たが、役に立たず、毎回同じ行で同じエラーが発生します。
if (!serialPort.IsOpen)
{
try
{
serialPort.Open();
}
catch
{
serialPort.Close();
serialPort.Dispose();
serialPort = null;
serialPort = new SerialPort("COM7", 4800, Parity.None, 8, StopBits.One);
serialPort.Open();
}
}
イベントも試しserialPort.DataReceived
ましたが、システムがスリープから復帰すると、イベントは発生しません。
唯一の回避策は、アプリケーションを停止して再度実行することです。誰かがまともな方法でそれを整理する手がかりをくれれば、本当に感謝します.