这里是从串行端口读取数据的代码。为了简单起见,让我们点击一下按钮;串口通讯错误,“请求的资源正在使用中。”
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
事件,但一旦系统醒来时从睡眠不触发事件。
唯一的解决办法是停止应用程序并再次运行它。如果有人给我一个线索,以一种体面的方式对它进行整理,我将非常感激。
那么你可以尝试关闭时,系统进入睡眠的连接,并尝试重新上简历。 – Reniuz
你使用真正的串口还是某种端口仿真?在真实的串行端口上试试这个程序。 –
@AlexFarber这是一个真正的串行端口,一个GPS设备连接到它。 – ABH