串口关闭出现卡死现象

flyhorse1010 2011-05-03 04:42:47
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;
}”
这段代码注释掉就不会出现程序卡死的问题,可是会有提示信息不安全的跨线程访问控件;
大虾们,我该怎么办???
...全文
402 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyhorse1010 2011-05-09
  • 打赏
  • 举报
回复
我解决了,我是单独为关闭串口开一个线程弄好的;[Quote=引用 1 楼 walkghost 的回复:]
跨线程访问UI控件会导致界面假死,建议还是继续用委托啊。关闭串口卡死的问题,好像有个大侠写了个串口的系列教程,你找找看,在csdn博客里。
[/Quote]
walkghost 2011-05-03
  • 打赏
  • 举报
回复
跨线程访问UI控件会导致界面假死,建议还是继续用委托啊。关闭串口卡死的问题,好像有个大侠写了个串口的系列教程,你找找看,在csdn博客里。

110,500

社区成员

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

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

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