Foxtable(狐表)用户栏目专家坐堂 → [求助]串口的DataReceived事件造成窗体卡死


  共有3170人关注过本帖树形打印复制链接

主题:[求助]串口的DataReceived事件造成窗体卡死

帅哥哟,离线,有人找我吗?
noway143
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:92 积分:839 威望:0 精华:0 注册:2016/1/27 15:09:00
[求助]串口的DataReceived事件造成窗体卡死  发帖心情 Post By:2018/10/20 10:42:00 [只看该作者]

我的串口有大量实时数据在接收,而数据发送端是一直保持发送,不会停的。
我在DataReceived收到数据后,直接在窗体控件上显示出来,我这样做其它问题都没有,只是用窗体上的button去close这个串口时,随机性的整个窗体被卡死,不报任何异常信息。

我百度后,似乎是由于DataReceived事件和窗体处于不同线程,需要使用invoke或begininvoke来跨线程使用窗体控件,请教这在foxtable中怎么实现?代码怎么写?

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110574 积分:562760 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/10/20 11:14:00 [只看该作者]

试试使用异步函数去关闭串口:http://www.foxtable.com/mobilehelp/scr/3269.htm

 回到顶部
帅哥哟,离线,有人找我吗?
noway143
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:92 积分:839 威望:0 精华:0 注册:2016/1/27 15:09:00
  发帖心情 Post By:2018/10/22 10:20:00 [只看该作者]

使用异步函数去关闭串口,还是不行,但可以出现报错信息窗口了。

图片点击可在新窗口打开查看此主题相关图片如下:捕获.jpg
图片点击可在新窗口打开查看


我的理解是:

异步函数去关闭串口,相当于又开了一个新线程去尝试关闭串口,这样做,虽然不会阻塞窗体UI所在的主线程,解决了主窗体被卡死的问题;

但此时,DataReceived事件所在的线程因为一直还在接受数据,串口资源一直被这个线程占用,且这个线程还一直在使用主线程的窗体控件(因为DataReceived收到的数据一直=使用textbox控件来显示),这时,用于关闭串口的新开线程直接关闭掉串口,依然会发生异常。

使用异步函数去关闭串口,只是相当于把这个错误从主线程转移给了新开的子线程而已,但并没有消除这个错误。

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/10/22 10:53:00 [只看该作者]

为什么要关闭串口?不关闭不可以?

 

做一个变量记录标记,如果标记成关闭,你DataReceived事件就不执行操作,即可。

 

在某个你不需要串口的时候,你再close即可。


 回到顶部