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

2024-03-04

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

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

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

这不是一个错误。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • Cesium地图可以在Apache HTTP服务器而不是node.js环境上运行吗?

    我有一个 Apache HTTP 服务器 可以处理我对 Ruby on Rails 项目的所有请求 我们正在考虑添加 Cesium 地图组件 我想知道是否可以在 Apache HTTP 服务器上运行 Cesium 而不是设置 node js
  • 在 Android 1.5 上运行应用程序时出现 NotFoundException 和 FileNotFoundException

    我正在尝试将 android 1 6 应用程序向后移植到 android 1 5 遵循此处的建议 http comments gmane org gmane comp handhelds android devel 97051 http c
  • Python Matlab 引擎安装

    我一直在尝试为 python 安装 matlab 引擎 这样我就可以从 python 脚本中调用 matlab 函数 我使用的指南是这个 http uk mathworks com help matlab matlab external i
  • 如何以编程方式删除 UINavigationbar 提示?

    我有一个视图控制器 我在IB中设置了带提示的导航栏 但有时我想删除提示并将栏设为 1 行 我怎样才能在代码中做到这一点 self navigationItem setPrompt nil 这会以动画方式删除提示
  • Webpack 动态 require 和 require 语句中的加载器

    是否可以使用动态require and require context在 require 语句中使用显式加载器 我希望能够做这样的事情 但这对我不起作用 var req require context somedir false js va
  • 如何在 linq 中使用 groupby 时进行多重连接

    我的数据库中有一个图片评级表 对于每个新的评级 都会创建一个新的图片评级表行 我将按上周和图片 ID 对这些评分进行分组 这意味着上周一张图片的所有评分将被累积并成为一个评分 然后我将能够按其计数对它们进行排序 这是我的图片评级表 publ
  • 如何在 celery 内为每个用户生成队列?

    因此 我尝试将 Web 请求中的阻塞内容移至后台任务并利用队列 我对消息传递和发布 订阅也很陌生 用户将数据推送到那里并进行处理 稍后用户会收到相关通知 我为此做了一个 celery 设置 发现它不能满足我为每个用户分配自己的任务的专用队列
  • Android 和设置(图像)视图 alpha 的 alpha

    真的没有对应的 XML 属性吗 setAlpha int 如果没有 还有哪些替代方案 它比其他响应更容易 有一个xml值alpha需要双值 android alpha 0 0 那是看不见的 android alpha 0 5 透视 andr
  • Rails 5.2 中单独的secret_key_base?

    我刚刚从 5 1 升级到 5 2 我对这种 更好 的存储秘密的方法感到很困惑 也许我不明白 但现在开发和生产似乎已经 合并 成一个单一的SECRET KEY BASE也master key 它是否正确 如果没有 我如何使用单独的主密钥和SE
  • 使用 Firebase-PHP 验证 Firebase ID 令牌

    我正在使用 Firebase Auth 在以 PHP 编码的网络应用程序上授权用户 授权本身是用 Javascript 进行的 它在 Ajax 请求上执行以验证用户是否已登录 要在我已经实现的服务器上使用 Firebase AdminFir
  • 当我单击屏幕上的其他位置时,按钮的底部边框消失

    fiddle https jsfiddle net bbvxnsyo 这是我的 HTML 代码
  • 基于偏好的分组算法

    我正在寻找一种方法来根据偏好将人们分类 例如 假设有 100 名学生 每人将被分配到以下五个班级之一 科学 40 个座位 数学 15 个席位 历史 15 个席位 电脑 20 个座位 写作 10 个座位 每个学生都有三个按偏好排序的首选课程
  • 为 std::shared_ptr 分配内存的正确方法

    我已经实现了一个功能 其中身份被赋予给我并且不受我的控制 它返回std shared ptr
  • 使用 GraphQL 机制,但返回 CSV

    普通的 REST API 可能会让您以不同的格式请求相同的数据 并使用不同的Accept标头 例如application json or text html or a text csv格式化的响应 但是 如果您使用 GraphQL 则 JS
  • OpenGL ES 1.1:如何在不损失亮度的情况下更改纹理颜色?

    我希望能够在代码中更改粒子的颜色 因此可以使用任何颜色 所以我只有一种基本上具有亮度的纹理 我一直在使用glColor4f 1f 0f 0f 1f 应用颜色 我尝试过的每个 Blendfunc 都接近工作 最终都像下面的最后一张图片一样 我
  • 向下滚动到div+一定的边距

    我正在使用此脚本滚动到页面上的某个 div button click function html body animate scrollTop scrolltothis offset top 500 工作完美 这会将页面滚动到 scroll
  • Unix C 套接字服务器不接受连接

    事情是这样的 我正在用 C 语言 使用 unix 系统调用 编写一个简单的 tcp 套接字服务器 但我无法接受连接 据我所知 我很好地完成了服务器初始化 但是当我尝试连接到我打印出来的端口 参见下面的代码 时 它拒绝了 就好像什么都没有一样
  • CKEDITOR:如何转换所有 html 实体

    这是清单 http www elizabethcastro com html extras entities html http www elizabethcastro com html extras entities html我要么想启用
  • 运行混淆代码时是否会影响性能? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 All 我建议在我的组织的标准构建过程中添加代码混淆 人们提出的问题之一是 与运行未混淆的代码相比 运行混淆的代码是否会对性能产生影响
  • C#:使用 Winforms 关闭 SerialPort 的正确方法

    我有一个应用程序 我可以从串行端口读取数据 一切正常 直到我关闭该应用程序 当我单击 X 时 应用程序只是挂起 UI 无响应 我从 DataReceived 事件处理程序中的端口读取数据 并在 FormClosed 发生时关闭端口 priv