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));
...
}
------解决方案--------------------http://www.cnblogs.com/sufei/p/3145333.html
------解决方案--------------------
BeginInvoke是异步调用,如果你在调用之后不需要什么其他的反馈,同时又想继续执行下面的代码,可以使用异步调用