最近在一个平台上使用SerialPort类开发程序时,发现程序在使用SerialPort类时会异常退出,而且诡异的是,就算把所有操作串口的代码都放在try{}catch{}块中也无法捕获这个异常.最终,在国外一个论坛上发现了一个解决方法. comport.open(); GC.SuppressFinalize(comport.BaseStream); 也就是在打开串口后,立刻调用GC.SuppressFinalize(comport.BaseStream); 这个函数可以阻止垃圾回收器去回收Se…
因为系统需要对一些核心数据进行预加载以保证查询速度. 所以在application_start 事件中启用了后台线程对相关的数据进行加载并解密(为了保证解密的效率,将AES对像做了静态对像来保存:private static readonly Aes aesAlg = Aes.Create();) 但是在有些情况下报"Safe handle has been closed"异常导致加载失败. 具体的堆栈信息: System.Runtime.InteropServices.SafeHan…
c# SerialPort使用时出现“已关闭 Safe handle”的错误我在开发SerialPort程序时出现了一个问题,在一段特殊的扫描代码的时候会出现“已关闭 Safe handle”的错误,很疑惑.我是通过线程对串口进行扫描的,原本我以为handle是指的线程,于是代码跟踪了半天,但也没发现线程有什么问题.于是把目光转移到SerialPort类上,写了一段测试代码: using System;using System.Threading;using System.IO.Ports; n…
最近在学习esp8266 用的sdk开发,烧录碰到个问题,本人使用的esp8266模块是esp8266-12f,模块是4M的也就是32Mbit 参考了网上的很多办法,大部分写的不清楚也没解决,摸索了几个小时,终于找到解决办法 在SDK开发的主目录下有个Makefilm文件 点击打开文件,往下翻可以看到这样几行代码 我分析SPI_SIZE_MAP是配置模块内存的,由于我的sdk是下载的别人的工程,我使用的可能别人的模块内存和我的不一样,我们4M的模块应该把上面的数字3改成4,然后保存编译烧录进模块…
http://www.3rgb.com/entry/dotnet_call_as400_program2 .NET连接AS400出现[Safe handle has been closed http://www.3rgb.com/entry/Safe_handle_has_been_closed_error_on_as400 DB2(as400)数据分页SQL http://www.3rgb.com/entry/db2_page_split_sql AS400命令行CALL程序时传递数字参数总结…
再次是一篇入门文,各路神仙退散. 直接进入主题,又不是历史课,关于RS232那些前世今生的故事就不摆了. 硬件链接 首先以9针小口为例(大口应当只能去博物馆看了吧)看一下管脚排布,其实RS232本身没进博物馆都已经够让我惊讶了. (图片来自互联网) 通常使用的接线图: (图片来自互联网) 硬件接口部分的重点: 绝大多数情况下,我们只需要接2号.3号.5号,RXD/TXD/SG三根线就能正常工作.(顺便多说一句,古老的大串口是2.3.7号) 直连模式一般用于延长线或者大小口的转换线. 交叉线是用于…
串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便易行,所以应用广泛.现在国际上不断有串口新技术及新规格推出,结合社会各方面需要,串口通信发展的空间庞大.串口通讯技术因其自身的优势和特性,及计算机技术的广泛应用深入到生活和生产的各个领域,世界上数以亿计的通讯设备都以串口通讯的方式.在进行着数据的传输.在一个应用系统中,同时使用Windows和Linux操作系统,合理地分配资源,各取所长,是实现系统高性能的有效途径.为了使两个不同操作系统能协同工作,实现资源和数据共享,需要在两者…
1.API描述 在WIN32 API中,串口使用文件方式进行访问,其操作的API基本上与文件操作的API一致. 打开串口 Win32 中用于打开串口的API 函数为CreateFile,其原型为: HANDLE CreateFile ( LPCTSTR lpFileName, //将要打开的串口逻辑名,如COM1 或COM2 DWORD dwAccess, //指定串口访问的类型,可以是读取.写入或两者并列 DWORD dwShareMode, //指定共享属性,由于串口不能共享,该参数必须置为…
//枚举串口 NTSTATUS status; HANDLE hKey = NULL; OBJECT_ATTRIBUTES oa; UNICODE_STRING strPath = RTL_CONSTANT_STRING(L"\\Registry\\Machine\\HARDWARE\\DEVICEMAP\\SERIALCOMM");// ULONG ResultLength = 0; PKEY_FULL_INFORMATION PKFI; PKEY_VALUE_PARTIAL_INF…
我公司最近升级程序经常报出更新失败问题,究其原因,原来是更新时,他们可能又打开了正在被更新的文件,导致更新文件时,文件被其它进程占用,无法正常更新而报错,为了解决这个问题,我花了一周时间查询多方资料及研究,终于找到了一个查询进程的利器:handle.exe,下载地址:https://technet.microsoft.com/en-us/sysinternals/bb896655.aspx,我是通过它来找到被占用的进程,然后KILL掉占用进程,最后再来更新,这样就完美的解决了更新时文件被占用报错…