发 帖  
原厂入驻New
发烧友10周年庆典,全网超值优惠来袭!千元现金券,下单抽奖赶紧参与》》
[问答] Labview 2018中使用.net进行串口发送数据卡顿的问题
345 labview
分享
windows10 labview2018使用.net进行串口发送数据,数据可以发送也能马上收到,但是随后程序会有一个几十秒的卡顿,晕死

写串口后就开始卡,不知道怎么回事!

visa是没问题的!
0
1.png

N_Test.zip

下载积分: 积分 -1 分

42.49 KB, 下载次数: 5, 下载积分: 积分 -1 分

奖励20积分
2019-5-20 16:10:27   评论 分享淘帖 邀请回答
6个回答

查了一下stackoverflow,这个可以说是一个bug,也可以说是一个特性,原文如下:
It's not a bug.

The only reason it would hang when you close it is because in the event handler of your SerialPort object, you're synchronizing a call with the main thread (typically by calling invoke). SerialPort's close method waits for its EventLoopRunner thread which fires DataReceived/Error/PinChanged events to terminate, but since your own code in the event is also waiting for main thread to respond, you run into a dead lock situation.

The reason the bug report was closed 'as designed' is because the 'bug' is in your own code.

大概意思就是同步调用时由于要响应事件循环,因此等待时间就会比较长,解决方法就是新开一个线程,不要在主线程(界面UI)中调用close方法,对应的labview写法当然是异步调用了,即把close这一段封装成一个子VI,然后进行异步调用。

如下图所示:
sample.png
完整附件也一并上传
Test.zip (30.09 KB, 下载次数: 10)


评分

参与人数 1积分 +5 收起 理由
fasmer + 5 非常感谢!

查看全部评分

2019-5-20 16:10:28 2 评论

举报

2 条评论
  • 2019-5-22 09:37

    我对线程的认识不足,当时一直想从c#入手,另外对labview的异步调用等也不是很熟悉,非常感谢figoba,我要好好的补一下课才行!

  • 2019-5-22 16:06

    我试了下,发现还是有些问题的,我想简单了。其实对于异步调用的这个程序它也会卡顿,只不过主程序不卡顿了,但是有个问题是如果你在短时间内还要调用该子VI,那么主程序也会卡顿。用serialportstream我试了下OK的!

如果只是普通的串口读取,建议直接用visa,不需要.net
2019-5-20 16:54:41 1 评论

举报

1 条评论
你的版本太高了,我的2017都没法打开,在论坛上问问题,请尽量将附件vi转成较低的版本,方便大家,也方便自己。
2019-5-20 16:56:03 评论

举报

问题出在C#serialport类的close方法会造成线程死锁会卡,但是不知道怎么解决!
2019-5-21 12:58:07 评论

举报

用了nuget的serialportstream,原来2,30秒的等待变成7,8秒了,但还是大!
2019-5-21 17:35:15 评论

举报

用了nuget的serialportstream可以了,可能是上次测试是参数设错了!
2019-5-22 09:32:22 评论

举报

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

我要提问
课程
    关闭

    站长推荐 上一条 /10 下一条

    快速回复 返回顶部 返回列表