串口关闭出现卡死现象
public SerialPort sp; //串口对象
public delegate void mydelegate(object s,SerialDataReceivedEventArgs e);//为了安全的跨线程访问或设置控件属性
...
sp.readTimeOut=1000;//1秒超时
sp.dataReceived+=readData; //中断处理函数
...
public void readData(object sender,SerialDataReceivedEventArgs e)
{
try
{
if(this.InvokeRequired==true)
{
mydelegate mg=new mydelegate(readData); //为了安全的跨线程访问或设置控件属性
this.Invoke(mg);
return;
}
...
}
catce(Exception ex)
{
error(ex.message); //交给我自定义的错误处理函数;
};
}
public void error(string ex)
{
...
if(sp.IsOpen)
sp.Close();
}
现在的问题是:
1、我故意用波特率不匹配的方法来引出异常,触发了error(string ex),但是在error处理函数中sp.Close()会造成程序卡死的现象;
2、当我将“ if(this.InvokeRequired==true)
{
mydelegate mg=new mydelegate(readData); //为了安全的跨线程访问或设置控件属性
this.Invoke(mg);
return;
}”
这段代码注释掉就不会出现程序卡死的问题,可是会有提示信息不安全的跨线程访问控件;
大虾们,我该怎么办???
public delegate void mydelegate(object s,SerialDataReceivedEventArgs e);//为了安全的跨线程访问或设置控件属性
...
sp.readTimeOut=1000;//1秒超时
sp.dataReceived+=readData; //中断处理函数
...
public void readData(object sender,SerialDataReceivedEventArgs e)
{
try
{
if(this.InvokeRequired==true)
{
mydelegate mg=new mydelegate(readData); //为了安全的跨线程访问或设置控件属性
this.Invoke(mg);
return;
}
...
}
catce(Exception ex)
{
error(ex.message); //交给我自定义的错误处理函数;
};
}
public void error(string ex)
{
...
if(sp.IsOpen)
sp.Close();
}
现在的问题是:
1、我故意用波特率不匹配的方法来引出异常,触发了error(string ex),但是在error处理函数中sp.Close()会造成程序卡死的现象;
2、当我将“ if(this.InvokeRequired==true)
{
mydelegate mg=new mydelegate(readData); //为了安全的跨线程访问或设置控件属性
this.Invoke(mg);
return;
}”
这段代码注释掉就不会出现程序卡死的问题,可是会有提示信息不安全的跨线程访问控件;
大虾们,我该怎么办???
...全文
相关推荐
stm32f030f4串口与flash读写一起使用时出现卡死现象
在使用STM32F030F4芯片进行串口通信和内部Flash读写操作时,可能会遇到程序卡死的问题。这个现象发生在两者同时进行时,单独使用时都没有问题。
linux下Qt通信小结.pdf
然而,这种方式需要开发者自行处理串口的打开、关闭、读写等细节,对于复杂的应用场景可能会比较繁琐。2.
解决串口关闭死锁.net.docx
在测试串口程序时,虚拟串口可能导致不稳定的情况,特别是当发送和接收数据时。然而,这个问题在使用真实硬件设备时可能会减轻或消失。更常见且棘手的问题是程序在关闭串口时可能会卡死,这通常是由线程死锁导致的。
串口导致单片机死机的原因
正确的做法是,在拔掉USB线之前,务必先关闭电脑端的串口通讯,然后再拔出USB线。再次,供电问题也是需要关注的领域。
设备重启卡死问题分析-reboot卡死
Reboot卡死问题分析 设备采用新塘处理器NUC972,设备在重启过程中出现概率性卡死问题 复现率极低 问题现象 设备IP:192.168.0.89 [ 39.940000] PC is at yaffs_tags_marshall_write+0xc0/0xdc [ 39.940000] LR is at yaffs2_checkpt_flush_buffer+0x9c/0x294 [ 39.940000] pc : [] lr : [] psr: 60000013 [ 39


