以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  关闭串口报错  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=163317)

--  作者:873773115
--  发布时间:2021/4/23 10:16:00
--  关闭串口报错
老师好。现在有个问题请教一下

现在如果在窗体的 afterclose 事件里 使用代码关闭串口,会直接导致系统假死
如果不关闭串口,直接关闭系统,会在系统关闭后,出现 《通用技术平台已停用》

如果在beforecloseproject 事件里 使用代码关闭串口,也会直接导致系统假死

代码如下:
If ports.Contains("COM1") = True AndAlso Ports("COM1").IsOpen Then
    Ports("COM1").Close()
End If

请问老师,如何解决呢?

--  作者:有点蓝
--  发布时间:2021/4/23 10:46:00
--  
放到窗口按钮里点击有没有问题?放到命令窗口执行有没有问题?
--  作者:873773115
--  发布时间:2021/4/23 14:31:00
--  
放在窗口按钮里不行,但不是每次都会假死,可能3次会出现一次假死

e.Form.TimerEnabled = False
If ports.Contains("COM1") = True AndAlso Ports("COM1").IsOpen Then
    Ports("COM1").Close()
End If

--  作者:有点蓝
--  发布时间:2021/4/23 14:58:00
--  
假死的可能程序还在执行什么代码,等一段时间看看能不能结束
--  作者:873773115
--  发布时间:2021/4/23 15:18:00
--  
不是,直接就假死了,等几分钟后任然是假死状态。只能结束进程
这里有个帖子说的问题 和我遇到的是一样的,还提供了解决方法,但是没看懂,请老师帮忙看下

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&replyID=884352&ID=132444&skin=1

--  作者:有点蓝
--  发布时间:2021/4/23 15:27:00
--  
他是写错串口名称。

试试每次接收完毕数据后添加一句:Application.DoEvents

--  作者:873773115
--  发布时间:2021/4/23 16:54:00
--  
不行,串口数据刷新放在窗口的  timertick事件中了,然后在里面加了 
Application.DoEvents

afterload 事件中设置了打开  timertick 开关
直接窗口没打开就假死了



--  作者:873773115
--  发布时间:2021/4/23 17:02:00
--  
老师补充一下,如果电脑没插上与地磅相连的数据线时候,随便怎么操作,啥事儿都没有

只有在线正常连接的时候,数据也正常传输的时候,使用串口关闭时,会出现这种情况

--  作者:有点蓝
--  发布时间:2021/4/23 17:27:00
--  
不关闭串口,直接退出窗口,等窗口关闭后,再另外关闭串口有没有问题?
--  作者:873773115
--  发布时间:2021/4/23 18:38:00
--  
测试了。也不行,也是直接假死     只要线路正常连接,有数据过来的话   
使用 Ports("COM1").close()  这个方法关闭串口,就会假死