C# 串口 已关闭 Safe handle

摘要:
经过一番测试,查找问题。发现在一个函数内利用SerialPort创建了串口通信实例后,没有将该实例放入任何其他容器中进行缓存,从而导致了上述崩溃BUG的产生。后来修改代码,将该实例放入了一个全局变量List集合中,该BUG得以解决。

今天在使用我的通信框架,创建基于串口通信的客户端时,出现这样一个BUG:

  1. 未处理System.ObjectDisposedException
  2. Message=已关闭Safehandle
  3. Source=mscorlib
  4. ObjectName=""
  5. StackTrace:
  6. 在System.Runtime.InteropServices.SafeHandle.DangerousAddRef(Boolean&success)
  7. 在System.StubHelpers.StubHelpers.SafeHandleAddRef(SafeHandlepHandle,Boolean&success)
  8. 在Microsoft.Win32.UnsafeNativeMethods.GetOverlappedResult(SafeFileHandlehFile,NativeOverlapped*lpOverlapped,Int32&lpNumberOfBytesTransferred,BooleanbWait)
  9. 在System.IO.Ports.SerialStream.EventLoopRunner.WaitForCommEvent()
  10. 在System.Threading.ThreadHelper.ThreadStart_Context(Objectstate)
  11. 在System.Threading.ExecutionContext.Run(ExecutionContextexecutionContext,ContextCallbackcallback,Objectstate,BooleanignoreSyncCtx)
  12. 在System.Threading.ExecutionContext.Run(ExecutionContextexecutionContext,ContextCallbackcallback,Objectstate)
  13. 在System.Threading.ThreadHelper.ThreadStart()
  14. InnerException:

当这个BUG出现时,程序直接崩溃,无法跟踪到错误代码位置。

经过一番测试,查找问题。发现在一个函数内利用SerialPort创建了串口通信实例后,没有将该实例放入任何其他容器中进行缓存,从而导致了上述崩溃BUG的产生。

后来修改代码,将该实例放入了一个全局变量List<通信客户端>集合中,该BUG得以解决。

原文地址:https://blog.csdn.net/yeqi3000/article/details/41983517

免责声明:文章转载自《C# 串口 已关闭 Safe handle》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇mysql 按天创建分区存储过程linux 下创建管理员权限账户下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

网络通信框架Retrofit2

网络通信框架Retrofit2 1 概要 Retrofit2的简介以及特点 Retrofit2使用配置(导包,权限等) Retrofit2中常用的注解介绍 Retrofit2实现http网络访问 GET与POST请求 同步请求和异步请求 Retrofit2实现文件上传 Retrofit2进行大文件下载 2 Retrofit2的特点及简介 简介 Retrof...

[Linux环境编程] TCP通信与多线程编程实现“多人在线聊天室”

[linux环境编程] TCP通信与多线程编程实现“多人在线聊天室” 一、基本概念1、TCP通信   TCP(Transmission Control Protocol)就是传输控制通讯协议,是TCP/IP体系结构中最主要的传输协议。其“三次握手”提供了可靠的传送,高可靠性保证了数据传输不会出现丢失与乱序,再加之TCP连接两端设有缓存用来临时存放双向通信的...

java之trycatchfinally代码块与return,throw的执行顺序的探索

  时光荏苒,转眼间毕业都半年了,java编程也五个月了。写代码的过程中,会经常遇到解决代码抛异常的情况。平时只注重完成功能,也没太注意try_catch_finally的内在执行顺序,只知道表面的现象:try里的代码运行出错,catch抓着异常处理,finally最后总要执行。知道一次遇到个少见的问题,当着项目经理的面,把我给难住了,才发现自己会最表面的...

wince 串口调试信息输出

不管在WinCE5.0还是在WinCE6.0中,我们在调试驱动或者应用的时候都会用到打印函数。在驱动里面,我们可能会用DEBUGMSG(..),RETAILMSG(..),还有NKDbgPrintfW(..)。在我们使用这些打印函数调试我们的程序之前,我们需要实现串口打印功能。     在WinCE的BSP中,如果想调用DEBUGMSG(..)或者RETA...

Docker Swarm 创建overlay网络

Docker Swarm 创建overlay网络 环境: 系统:Centos 7.4 x64 应用版本:Docker 18.09.0 管理节点:192.168.1.79 工作节点:192.168.1.78 工作节点:192.168.1.77 一、创建网络与服务 1、管理节点:创建overlay网络名字为my-network docker networ...

C# 与 SQLite的操作

1、通过Add References引用SQLite ADO .NET安装目录的bin目录下的System.Data.SQLite.DLL。 2、创建数据库文件:因为始终是个0字节文件,应该利用IO也可以(?!)。 System.Data.SQLite.SQLiteConnection.CreateFile(datasource);3、连接数据库 Syst...