这是从串行端口读取数据的代码。为了简单起见,让我们单击按钮即可;
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()
。内部异常中没有任何内容。
我已经尝试了很多关于serialPort
对象的事情,比如关闭、处置或明确地将其分配给 null 和重新初始化,但它没有用,每次都在同一行出现相同的错误。
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
事件,但是一旦系统从睡眠中唤醒,事件就不会被触发。
唯一的解决方法是停止应用程序并再次运行它。如果有人给我一个线索以体面的方式解决它,我将非常感激。