串口关闭出现卡死现象
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;
}”
这段代码注释掉就不会出现程序卡死的问题,可是会有提示信息不安全的跨线程访问控件;
大虾们,我该怎么办???