C#Winform + RFID刷卡串口通信老是卡死 | 您所在的位置:网站首页 › 串口工具是啥 › C#Winform + RFID刷卡串口通信老是卡死 |
需求:
在登录界面通过RFID刷卡然后实现自动登录 问题:在登录界面通过RFID刷卡然后实现自动登录,一刷卡就会卡死。但是手动输入账号登录却没有问题。 原因:原来RFID刷卡在serialPort_DataReceived方法中触发回调函数的时候,需要给登录界面用户ID赋值,然后自动点击登录按钮的时候,在登陆按钮功能中需要把登录界面隐藏同时把RFID刷卡的功能关闭掉,此时就需要把登录界面绑定的SerialPort的端口号Close(),执行到这一步Close()的时候就会卡死。原因就是如果正在读取数据的时候,你去关闭串口,会卡死的。 解决方案:代码: Invoke会阻塞工作线程,也就是阻塞读取数据的线程。 private void ReceiveData(string str) { if (txt_UserAccount.InvokeRequired) { InvokeCallback d = ReceiveData; txt_UserAccount.Invoke(d, new object[] { str }); } else { } }改善代码: BeginInvoke不会阻塞工作线程,也就是读取数据的线程立即完成。 private void ReceiveData(string str) { if (txt_UserAccount.InvokeRequired) { InvokeCallback d = ReceiveData; txt_UserAccount.BeginInvoke(d, new object[] { str }); } else { } } |
CopyRight 2018-2019 实验室设备网 版权所有 |