我正在编写一个程序来从串行读取数据并显示它。当我断开与The I/O operation has been aborted because of either a thread exit or an application request
异常的串行时,有时(不是每次都)崩溃。 (我猜这里有些不对劲,即使不是每次都发生。)
以下是我如何阅读连续剧:
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
// this line below is where the exception is
string read = _serialPort.ReadLine().Replace(".", ",").Split('\r')[0];
}
// clicking on a button opens/closes serial
private void button1_Click(object sender, EventArgs e)
{
if (isSerialConnected)
disconnectSerial();
else
connectSerial();
}
public void connectSerial()
{
_serialPort.PortName = serialCombobox.SelectedItem.ToString();
_serialPort.BaudRate = 9600;
_serialPort.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.serialPort1_DataReceived);
_serialPort.Open();
serialCombobox.Enabled = false;
connectSerialButton.Text = "disconnect";
isSerialConnected = true;
}
public void disconnectSerial()
{
_serialPort.Close();
serialCombobox.Enabled = true;
connectSerialButton.Text = "connect";
isSerialConnected = false;
}
我做错了什么?
答案 0 :(得分:1)
您从事件处理程序中的串行端口读取数据。来自SerialPort.ReadLine():
默认情况下,ReadLine方法将阻塞,直到收到一行。
因此,当您关闭串行端口时,您可能仍在等待接收线路。但是如果端口关闭则无法接收数据,因此抛出异常,因为无法再接收一行。
答案 1 :(得分:1)
我已经用这种方式改变了,现在这种方式有效。
try
{
read = _serialPort.ReadLine().Replace(".", ",").Split('\r')[0];
}
catch (System.IO.IOException error)
{
return;
}
catch (System.InvalidOperationException error)
{
return;
}
发生了两种错误,IOException带有问题标题上的消息,InvalidOperationException带有消息"端口已关闭"。在这两种情况下,我们都会返回而不处理数据。
我不确定这是应该做的方式,但无论如何,它有点有效。