求教使用C#serialPort串口控件打开一个硬件串口在关闭之后的问题

问题描述

在使用C#serialPort制作的串口调试器过程中发现的问题,希望能够描述清楚也希望有人能知道为什么会这样,假设使用C#串口调试助手打开COM1之后再关闭com1之后直接使用com1口为单片机写程序,这样问题就来了,只是能够正常打开串口但是却永远显示等待单片机响应,只有拔掉USB串口再重插或者使用网上下载的串口调试助手重新打开一次COM1在关闭才可以给单片机写入程序,不知道是什么问题,补充说明下如果不给单片机写程序的话只是使用串口测试收发那一切都正常,无论怎么打开关闭再打开都可以收发数据,个人水平有限不知道为什么只是感觉上是C#serialPort控件打开再关闭之后没有彻底释放资源还有占用,我能想到的关闭方法只有下面这些了试过关闭代码如下:serialPort1n.Close();serialPort1n.Dispose();GC.Collect();GC.WaitForPendingFinalizers();只是仍然是有问题,实际试了从网上下载的串口调试助手就没有我说的这个问题,下面是我打开串口的代码了:serialPort1n.Open();if(serialPort1n.IsOpen){}最后补充一句就是我想请教各位大神的问题就是C#serialPort打开后应该怎样关闭才能不出现我说的问题

解决方案

解决方案二:
不管底层有没有抛出事件(或者你根本没有捕获事件),你都可以从高层设计一个心跳机制,来真正检测所有你需要检测的状态。例如你可以每隔10秒钟轮询一次注册的所有设备,对于那些超时未响应的设备以后就不再做请求,如过所有设备都没有响应则可以关闭串口了。
解决方案三:
不要纠缠“怎样关闭”这类低级的技术问题。网络本来就是时断时通的,如果对方没有“关闭”而只是“死掉”了,你又如何处理?
解决方案四:
引用1楼以专业开发人员为伍的回复:

不管底层有没有抛出事件(或者你根本没有捕获事件),你都可以从高层设计一个心跳机制,来真正检测所有你需要检测的状态。例如你可以每隔10秒钟轮询一次注册的所有设备,对于那些超时未响应的设备以后就不再做请求,如过所有设备都没有响应则可以关闭串口了。

说的有点道理我只想解决实际问题又或者为什么会有问题很希望知道为什么缺又根本无思路这就是菜鸟的悲哀了
解决方案五:
不会吧,你简单写个程序试试,关闭了应该是释放资源了的
解决方案六:
其实,只要程序运行,serialport根本不需要关闭,也就是说spopen以后,直接把连接设备拔掉,再插上,直接就能通信你出现的情况,可能是因为写完程序之后,连接设备端的信号出现异常导致的你试试,不要关闭sp直接插拔设备,看看能不能继续通信
解决方案七:
看来还是我没说明白问题现象问题现象是假设使用我用c#制作的调试助手打开com1之后再关闭com1,之后在不拔出usb串口的情况下直接使用com1就会出现我说的问题说明下因为使用的是单片机开发版所以usb串口和单片机再同一块板子上,写完这个回复突然之间想到了一种可能性需要试试
解决方案八:
引用5楼龍过鸡年的回复:

其实,只要程序运行,serialport根本不需要关闭,也就是说spopen以后,直接把连接设备拔掉,再插上,直接就能通信你出现的情况,可能是因为写完程序之后,连接设备端的信号出现异常导致的你试试,不要关闭sp直接插拔设备,看看能不能继续通信

拔掉再插肯定好使了但是问题就是用网上下载的串口助手不拔也好使自制的必须拔掉或者使用网上下载的助手打开一次所以问题一定在程序上还是我未知的想不到的地方
解决方案九:
没遇到过,我只知道用.net的串口类打开串口然后直接拔下usb再插会很蛋疼
解决方案十:
引用7楼tys591320的回复:

Quote: 引用5楼龍过鸡年的回复:
其实,只要程序运行,serialport根本不需要关闭,也就是说spopen以后,直接把连接设备拔掉,再插上,直接就能通信你出现的情况,可能是因为写完程序之后,连接设备端的信号出现异常导致的你试试,不要关闭sp直接插拔设备,看看能不能继续通信

拔掉再插肯定好使了但是问题就是用网上下载的串口助手不拔也好使自制的必须拔掉或者使用网上下载的助手打开一次所以问题一定在程序上还是我未知的想不到的地方

你的关闭方式是不是用的Close()如果是的话,你下次再打开,直接new一个,不要Open()
解决方案十一:
个人感觉,不像是关闭串口的问题。你的串口设备,是否是正常的?你说你只有在对设备进行处理后,才会导致串口的占用。那你就找你对设备处理时候的程序都做了什么?与设备的协议是否都正常?
解决方案十二:
C#的SerialPort的Close仅仅是关闭内部流。而且她不立即关闭端口的。文档上说需要等待一会儿再Open。

时间: 2024-11-14 23:49:10

求教使用C#serialPort串口控件打开一个硬件串口在关闭之后的问题的相关文章

javaweb-网页调用ocx控件打开或创建注册表的权限问题

问题描述 网页调用ocx控件打开或创建注册表的权限问题 在某几个win7 64位笔记本上, 通过服务器页面调用ocx读取注册表会提示无权限的现象,但使用本地html文件调用没问题, 不知是何原因,求大侠给点提示 解决方案 又试了一下,使用世界之窗浏览器可以正常使用了.但不明白为何? 解决方案二: ie本地file协议浏览(intranet)和http访问(internet)使用的是不同的安全设置,你按照本地的intranet安全配置internet安全设置 不过你这种需求没什么意义,只能针对特殊

对话框-vfp中使用webbrowse控件打开本地文件,怎么拦截下载窗口?

问题描述 vfp中使用webbrowse控件打开本地文件,怎么拦截下载窗口? 一个小程序,需要把word格式的文件在控件中打开,我选用了webbrowse控件,但每次打开,总会出现"下载"对话框,请问各位高手,该怎么拦截?谢谢! 解决方案 监听WebBrowser.FileDownload 事件参考WebBrowser.FileDownload 事件.aspx) 解决方案二: 监听WebBrowser.FileDownload 事件 参考:https://msdn.microsoft.

webbrowser-C# webBrowser控件打开工行网银登陆页面无法输入密码和验证码

问题描述 C# webBrowser控件打开工行网银登陆页面无法输入密码和验证码 C# webBrowser控件打开工行网银登陆页面无法输入密码和验证码

用C# winFrom的 webBrowser的控件打开文件,怎么样才能防止用户保存或另存,谢谢!

问题描述 用C#winFrom的webBrowser的控件打开文件,怎么样才能防止用户保存或另存,谢谢! 解决方案 解决方案二:比如说,pdf,excel,word等格式解决方案三:用webbrowser没有办法防止技术用户另存文件.解决方案四:用webbrowser没有办法防止技术用户另存文件.禁用右键,禁止快捷键可以阻止一般用户.要根本杜绝只有服务器渲染文档,用flashpaper之类的技术

delphi 用控件打开pdf文件无法读取pdf里的表单信息

问题描述 delphi 用控件打开pdf文件无法读取pdf里的表单信息 我用的delphi7 用的是破解版的foxit_ax_pro.ocx文件版本3.0.1.2506,用OpenFile打开一个包含表单的pdf文件,浏览正常,但用代码访问时出错(下面第二行,FNameMI存在): frm:=FoxitReaderSDK1.GetCurrentForm(); ShowMessage(frm.GetFieldByName('FNameMI').Value) ; 变成无法获取表单信息.另外单独打开该

实例-跪求大神啊,VB中dwgthumb控件打开DWG文件时需要设置什么参数

问题描述 跪求大神啊,VB中dwgthumb控件打开DWG文件时需要设置什么参数 VB中dwgthumb控件打开DWG文件时需要设置什么参数,用没用实例呢,谢谢啊,大神 解决方案 http://www.newxing.com/Code/VB/TXCL/dwg_462.htmlhttp://download.csdn.net/detail/dirk2212/4197363http://download.csdn.net/download/dirk2212/4198022http://www.edu

duilib 修复combo控件打开下拉菜单后不会自动定位到上次选择的位置上的bug

转载请说明原出处,谢谢:http://blog.csdn.net/zhuhongshu/article/details/43484589                 今天群里一个网友向我反应combo控件的一个bug:单击combo控件,展开下拉菜单后,不会自动定位到上次选择的位置,而是定位到最开头的位置.        带有bug的效果图:                                                               修复后的效果图:    

asp.net-新手请教大神一个关于JQueryEasyUI下Combogrid控件的一个问题

问题描述 新手请教大神一个关于JQueryEasyUI下Combogrid控件的一个问题 请教如何才能如图所示显示下拉框里的数据?我引用了例子里同样的方法,可是为什么显示不出来啊? 解决方案 效果图 页面代码,代码中 url: '../combogrid/datagrid_data1.json'里面可以换成你后台请求数据路径 解决方案二: Combogrid的数据使用ajax从服务器上获取,你这里没显示可能有两个原因:1服务器端没传过来数据,2服务器传来了数据,但是你的前台写的有问题. 建议你把

visual studio-别人写的MFC控件(一个.h一个.cpp)我怎么把这个控件添加到vs的界面中?

问题描述 别人写的MFC控件(一个.h一个.cpp)我怎么把这个控件添加到vs的界面中? 别人写的MFC控件(一个.h一个.cpp)我怎么把这个控件添加到vs的界面中? 能给个步骤吗? 解决方案 resource.h添加控件ID的定义,.rc中添加控件的属性 解决方案二: -.-有这些了就能随意加了, 首先将这两个文件放到项目文件下面,然后打开你的项目工程,右击项目的头文件,将鼠标移动到添加,然后点击添加现有项,选择.h;然后接着点击项目的实行文件,选择.cpp:然后就能使用了