串口传输数据时拔掉串口会有几率导软件崩溃,请教大神!

hsy123qwe 2018-04-03 09:29:20
目前做的软件是通过串口传输数据的,但在传输数据时拔出串口有时会导致软件异常退出,已经加了接收超时处理以及try catch
public void Timers_Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{ //传输超时尝试关闭串口
try
{
serialClass._serialPort.Close();
}
catch
{
MessageBox.Show("串口丢失,请重启软件传输!")
return;
}
}
但软件有时还是会异常关闭,有没有什么解决办法?
...全文
1183 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
会抄代码并不是程序员。知道一些必须有的规范,例如 #2 的代码是在程序的 Release 发布版本中必须有的,那里应该记录日志来打印 Exception 到日志文件,同时你在一些业务处理中也会记录 Exception 日志(但是继续 throw 抛出异常),这些跟“抄代码”完全不一样的做法才是自己解决问题之道。当你出现问题时你首先贴出来出错日志,你准确地给出了出错语句的行号,这才是专业的程序员干的事情。
  • 打赏
  • 举报
回复
引用 楼主 hsy123qwe 的回复:
目前做的软件是通过串口传输数据的,但在传输数据时拔出串口有时会导致软件异常退出,已经加了接收超时处理以及try catch public void Timers_Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { //传输超时尝试关闭串口 try { serialClass._serialPort.Close(); } catch { MessageBox.Show("串口丢失,请重启软件传输!") return; } } 但软件有时还是会异常关闭,有没有什么解决办法?
你确定是这个语句出错吗?如果不确定,那么你贴这个代码就是毫无意义的了。你是先出错,然后才增加这个代码,可见你大概是根本没有打印输出过日志来查看出错的代码。 不测试、不调试、不知道哪一条代码出错,靠“蒙”来编程,这就没法搞专业开发。
zj_zwl 2018-04-05
  • 打赏
  • 举报
回复
以前也遇到这个问题,后来没办法只能用系统API ReadFile等相关函数 读写串口数据才解决
Naive_Sb 2018-04-05
  • 打赏
  • 举报
回复
赚个积分用用
xuzuning 2018-04-04
  • 打赏
  • 举报
回复
怎样在串口通信中 怎样判断数据线掉了 ------解决方案-------------------- 异步操作 读数之后WaitCommEvent 返回假就通过GetLastError判断错误码 ERROR_ACCESS_DENIED就是串口被拔出
exception92 2018-04-04
  • 打赏
  • 举报
回复
这个应该在数据传输时定时检测串口的开关状态,而不是等到数据传输超时时再去关闭串口。
拜一刀 2018-04-04
  • 打赏
  • 举报
回复
虚拟串口→usb转的串口,手滑打错
拜一刀 2018-04-04
  • 打赏
  • 举报
回复
虚拟串口吗?关闭时不可能关闭的,串口号都不存在没办法关闭的 以前遇到过一次,.net自带串口控件崩溃,以前老程序vb6用的mscomm32就没事,于是我就换了控件 现在不知道怎么样了
xian_wwq 2018-04-04
  • 打赏
  • 举报
回复
有异常没有捕获导致软件退出 在Main中增加异常捕获 Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException); AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); 但这个只能避免崩溃, 解决问题最终还是要处理bug
hsy123qwe 2018-04-04
  • 打赏
  • 举报
回复
???顶顶顶顶顶顶顶顶
hsy123qwe 2018-04-04
  • 打赏
  • 举报
回复
引用 4 楼 拜一刀的回复:
虚拟串口→usb转的串口,手滑打错
对,就是这个虚拟串口–u转串
dai78 2018-04-04
  • 打赏
  • 举报
回复
定义个全局变量,退出前把变量致真,接受处理数据端判断到为真时,直接退出,退出前把那个全局变量致为假,等待为假后,再关闭串口。我就是这样处理的

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧