以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]串口的DataReceived事件造成窗体卡死 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=126391) |
-- 作者:noway143 -- 发布时间:2018/10/20 10:42:00 -- [求助]串口的DataReceived事件造成窗体卡死 我的串口有大量实时数据在接收,而数据发送端是一直保持发送,不会停的。 我在DataReceived收到数据后,直接在窗体控件上显示出来,我这样做其它问题都没有,只是用窗体上的button去close这个串口时,随机性的整个窗体被卡死,不报任何异常信息。 我百度后,似乎是由于DataReceived事件和窗体处于不同线程,需要使用invoke或begininvoke来跨线程使用窗体控件,请教这在foxtable中怎么实现?代码怎么写?
|
-- 作者:有点蓝 -- 发布时间:2018/10/20 11:14:00 -- 试试使用异步函数去关闭串口:http://www.foxtable.com/mobilehelp/scr/3269.htm |
-- 作者:noway143 -- 发布时间:2018/10/22 10:20:00 -- 使用异步函数去关闭串口,还是不行,但可以出现报错信息窗口了。 此主题相关图片如下:捕获.jpg 我的理解是: 用异步函数去关闭串口,相当于又开了一个新线程去尝试关闭串口,这样做,虽然不会阻塞窗体UI所在的主线程,解决了主窗体被卡死的问题; 但此时,DataReceived事件所在的线程因为一直还在接受数据,串口资源一直被这个线程占用,且这个线程还一直在使用主线程的窗体控件(因为DataReceived收到的数据一直=使用textbox控件来显示),这时,用于关闭串口的新开线程直接关闭掉串口,依然会发生异常。 使用异步函数去关闭串口,只是相当于把这个错误从主线程转移给了新开的子线程而已,但并没有消除这个错误。 |
-- 作者:有点甜 -- 发布时间:2018/10/22 10:53:00 -- 为什么要关闭串口?不关闭不可以?
做一个变量记录标记,如果标记成关闭,你DataReceived事件就不执行操作,即可。
在某个你不需要串口的时候,你再close即可。 |