C#关于SerialPort访问物理串口被拒绝的奇葩问题。

LangsStudio 2018-09-14 09:39:17
=。=这不是新手问题。
1. 用串口助手使用过了,那个物理串口没有被独占,调试的时候显示串口未打开;
2. 这个串口原来使用我的程序是能打开的,这问题发生很突然;
3. 就这么一个物理串口有问题,其他的串口使用程序都能正常打开
4. 最后一个奇怪的现象是,我程序界面分层较多,这个串口在我主界面容器那个分层的类里能被打开,再往下一层引用就打不开了。这是因为什么问题有知道的吗?
...全文
1468 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
LangsStudio 2018-09-21
  • 打赏
  • 举报
回复
引用 25 楼 yanghao1 的回复:
可能是权限问题,或端口冲突问题。
你说的权限问题,我原来也考虑过。。。后来去查了下,说CLICKONECE里面可以设置。不过尝试了下,不成功。后来就没处理了。 你有什么处理权限的方案吗? 另外就是端口冲突,你想说哪种冲突呢?
LangsStudio 2018-09-21
  • 打赏
  • 举报
回复
看来这个问题是没法解决了。。。再没办法就结贴算了。
LangsStudio 2018-09-21
  • 打赏
  • 举报
回复
引用 26 楼 jichao1010 的回复:
1.次一级容器操作COM1就有问题,那怀疑是操作COM1之前,COM1就被打开了,可以这样验证,先用串口助手将COM1打开,按推理应该不用到 代码中操作COM1那行代码,程序就会报错,因为怀疑是其他地方已经将COM1打开了。 2.还是针对第一种怀疑,下载Device monitor studio监控看一下,是不是代码中已经将COM1打开了,而自己没有注意到。
这个问题我前面回复说了,已经排除了。不是这种基础的占用问题或者开关控制逻辑产生的。
LangsStudio 2018-09-17
  • 打赏
  • 举报
回复
引用 23 楼 qq_43217289 的回复:
你的主界面和你分层界面的串口是不是同一个呢
是同一个啦。。。调试跟踪过。
苏克贝塔03 2018-09-17
  • 打赏
  • 举报
回复
1.次一级容器操作COM1就有问题,那怀疑是操作COM1之前,COM1就被打开了,可以这样验证,先用串口助手将COM1打开,按推理应该不用到
代码中操作COM1那行代码,程序就会报错,因为怀疑是其他地方已经将COM1打开了。
2.还是针对第一种怀疑,下载Device monitor studio监控看一下,是不是代码中已经将COM1打开了,而自己没有注意到。
yanghao1 2018-09-17
  • 打赏
  • 举报
回复
可能是权限问题,或端口冲突问题。
qq_43217289 2018-09-16
  • 打赏
  • 举报
回复
你的主界面和你分层界面的串口是不是同一个呢
LangsStudio 2018-09-15
  • 打赏
  • 举报
回复
引用 10 楼 Snowwolf_119 的回复:
看你的描述,需要先说明一下串口的使用,首先是声明该串口变量,然后是配置相应参数,接着是打开,使用,使用完后关闭。 你在主界面中不知道操作完com1后是否关闭了该串口? 你的主界面对com1使用完后(已关闭),其它层次的com1使用无效,是否其它串口也是如此(先在主界面使用,后在其它层次使用)? 你还可以试试 第一次启动程序,主界面操作除com1外的串口,是否也如com1的情况?
看来是我没表达清楚了。虽然界面多,但是,唯一操作串口的就一个子孙层级的界面容器的类里,主要用来配置跟开关控制。主界面容器只是用来声明串口实例当作类似全局变量方便传递串口实例,所以并没有任何串口操作。而且这个问题就发生在COM1上,其他COM号不会有问题。然后我的问题被卡的莫名其妙。你说COM1本身有问题吧,那他在我程序的主界面容器类里调用没问题,控制开关也没问题,在其他第三方助手软件都没问题。但是,说COM1没问题吧?但是实际上在BUG处它就发生问题了,但是其他COM号完全没有问题。真心蛋疼。对于串口实例的引用什么都是对的啦。所以不用考虑那些新手向可能发生的,我也不是新手啦。 所以这个BUG很让人费解。
雪狼孤竹 2018-09-15
  • 打赏
  • 举报
回复
看你的描述,需要先说明一下串口的使用,首先是声明该串口变量,然后是配置相应参数,接着是打开,使用,使用完后关闭。

你在主界面中不知道操作完com1后是否关闭了该串口?
你的主界面对com1使用完后(已关闭),其它层次的com1使用无效,是否其它串口也是如此(先在主界面使用,后在其它层次使用)?
你还可以试试 第一次启动程序,主界面操作除com1外的串口,是否也如com1的情况?
雪狼孤竹 2018-09-15
  • 打赏
  • 举报
回复
你的问题确实挺奇怪!
你说在主界面没问题,那么你试试下一个层次调用主界面的串口操作,是否可行?

另一个算是建议,像4楼说的,对于串口的所有操作,一般是在一个类,或是主窗体来进行,其它的串口使用,都是基于之前的来实现的。
圣殿骑士18 2018-09-15
  • 打赏
  • 举报
回复
既然你有分层的多层界面,问题又那么难找。建议你改一下你的代码架构,将对串口的调用封装成静态,单例的实现,供全局调用。这样的架构能避免你多层窗口间因为bug导致串口未释放的问题。
LangsStudio 2018-09-15
  • 打赏
  • 举报
回复
引用 12 楼 xuzuning 的回复:
可能会有这样一种情况: 在你复杂的层次关系中,在某处存在一段供测试用的打开 COM1 的代码(并可能是有条件执行的)
这是没有的。。。=。=
LangsStudio 2018-09-15
  • 打赏
  • 举报
回复
引用 14 楼 u013101799 的回复:
没遇到过,你的主界面和你分层界面的串口是不是同一个呢,只能慢慢调试看了
我是找不出来了,找了一天,准备放弃了。因为换个COM号就没问题了。而且,也不是不能操作有问题的COM1,只要把对COM1的调用限制在主界面容器那个层次的类就可以了。。。只是,我习惯进行模块化处理,不愿意这么弄。就不知道后面拿给别人用会不会出问题,出问题的话,只能取消把串口配置调用封装成一个组合控件的做法了。
LangsStudio 2018-09-15
  • 打赏
  • 举报
回复
引用 15 楼 wxf54318 的回复:
设个断点调试下是否在你需要打开的地方没有打开,或者是别的地方已经打开,你重复打开了
调试过了,代码的逻辑就是,主界面容器声明定义串口实例。剩下的操作都是交给子孙级的界面容器类里进行操作的。变量引用没问题,断点在出问题的类里打开串口前,串口变量的各个配置都是OK的,就是打开串口时候被拒绝了。但是如果在打开前,使用其他串口号都是可以操作的。所以这个问题很奇怪。你说我程序有问题,我觉得应该没问题。因为没有什么复杂的逻辑操作。其他串口都可以操作。说没问题吧,但是是出BUG了。我怀疑,平时简单的第三方串口助手软件一般定义声明以及后面的调用都是在主界面那个层级的,所以他们没有这种问题。。。
wxf54318 2018-09-15
  • 打赏
  • 举报
回复
设个断点调试下是否在你需要打开的地方没有打开,或者是别的地方已经打开,你重复打开了
002254 2018-09-15
  • 打赏
  • 举报
回复
没遇到过,你的主界面和你分层界面的串口是不是同一个呢,只能慢慢调试看了
雪狼孤竹 2018-09-15
  • 打赏
  • 举报
回复
引用 12 楼 xuzuning 的回复:
可能会有这样一种情况:
在你复杂的层次关系中,在某处存在一段供测试用的打开 COM1 的代码(并可能是有条件执行的)


有可能,测试代码中,针对com1的。
xuzuning 2018-09-15
  • 打赏
  • 举报
回复
可能会有这样一种情况:
在你复杂的层次关系中,在某处存在一段供测试用的打开 COM1 的代码(并可能是有条件执行的)
xuzuning 2018-09-14
  • 打赏
  • 举报
回复
已打开就不能再打开
串口操作宜置于单独的类中,以避免在繁杂的业务逻辑中出现冲突
雪狼孤竹 2018-09-14
  • 打赏
  • 举报
回复
你的多层调用,不清楚是不是都调用主界面的串口操作。
再有串口的打开、关闭不要太密集。
加载更多回复(6)

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧