C#:使用 Winforms 关闭 SerialPort 的正确方法

标签 c# winforms serial-port

我有一个从串行端口读取的应用程序,一切正常,直到我关闭该应用程序。当我点击 [X] 时,应用程序只是挂起,UI:无响应。

我从 DataReceived 事件处理程序中的端口读取数据,并在 FormClosed 发生时关闭该端口:

    private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
    {
        mySerialPort.Close();
    }

最佳答案

这不是错误。

当您关闭它时它会挂起的唯一原因是因为在您的 SerialPort 对象的事件处理程序中,您正在与主线程同步调用(通常通过调用 invoke)。 SerialPort 的关闭方法等待它的 EventLoopRunner 线程终止,该线程触发 DataReceived/Error/PinChanged 事件终止,但由于您自己的事件代码也在等待主线程响应,您会遇到死锁情况。

错误报告“按设计”关闭的原因是因为“错误”在您自己的代码中。

关于C#:使用 Winforms 关闭 SerialPort 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1696521/

相关文章:

c# - 根据Windows 8中的各种分辨率进行设计

c# - 调整右下角的无边框窗口

c# - 远程检查交换凭据并检查用户登录

node.js - Nodejs与Arduino之间的串口通信

node.js - 使用 Node 和串行端口 Node 包在同一端口上发送/接收数据

c# - 如何从 MatchCollection 中获取唯一元素

c# - resharper 内联对象初始化

c# - 在窗口上查找特定控件

c# - Windows 窗体标签页事件

c - 从Arduino串口读取整数