gda*_*rio 7 c# serial-port winforms
我有一个应用程序,我从串口读取,一切顺利,直到我关闭应用程序.当我点击[X]时,应用程序只是挂起,UI:无响应.
我从DataReceived事件处理程序中的端口读取,并在FormClosed发生时关闭端口:
private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
{
mySerialPort.Close();
}
Run Code Online (Sandbox Code Playgroud)
这不是一个错误.
它关闭它时它会挂起的唯一原因是因为在您的SerialPort对象的事件处理程序中,您正在与主线程同步调用(通常通过调用invoke).SerialPort的close方法等待其EventLoopRunner线程触发DataReceived/Error/PinChanged事件终止,但由于事件中你自己的代码也在等待主线程响应,你会遇到死锁情况.
错误报告"按设计"关闭的原因是因为"错误"在您自己的代码中.
小智 5
如果您的应用程序正在调用Invoke来处理接收的数据,请尝试调用BeginInvoke.
代替:
this.Invoke(d, new object[] { s, tb });
Run Code Online (Sandbox Code Playgroud)
使用:
this.BeginInvoke(d, new object[] { s, tb });
Run Code Online (Sandbox Code Playgroud)