日期:2014-05-17  浏览次数:20994 次

Invoke机制?界面卡死原因
在SerialPort的DataReceived事件里通过Invoke对UI进行操作,由于串口一直有数据,该事件基本上是一直被触发的。

界面上有一个按钮,执行的是串口的关闭,sp1.Close()。问题在于关闭串口的时候界面会卡死,试过好些次,只要注释掉this.Invoke(new EventHandler(displayInfo));就不会出现卡死情况,问题在于这。

解决办法已经找到了,添加一个判断标志,等待DataReceived事件里的Invoke操作执行完再关闭串口,这样可以避免界面卡死的情况。

想请问为什么会造成界面卡死的情况?关闭了sp1,会让程序卡在this.Invoke(new EventHandler(displayInfo))这吗?Invoke是怎么执行的呢?

 private void sp1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
   ...
   this.Invoke(new EventHandler(displayInfo));
   ...
}
Invoke

------解决方案--------------------
http://www.cnblogs.com/sufei/p/3145333.html
------解决方案--------------------
引用:
谢谢这个帖子解决了我的问题,我试了下Invoke和BeginInvoke都能正常运行,到底用哪个好点呢?
我给你留言了!

BeginInvoke是异步调用,如果你在调用之后不需要什么其他的反馈,同时又想继续执行下面的代码,可以使用异步调用