c#串口serialport中DataReceived事件解决思路
c#串口serialport中DataReceived事件
串口在serialPort在用dataReceived事件
dataReceived事件是写在button2_Click中的,click事件应该在按下以后被触发,click中代码执行完应该结束了,为什么dataReceived事件会一直被触发
------解决思路----------------------
当你注册一个事件处理程序的时候,如果触发事件的对象的生存期比较长,那么就会产生一种“事件泄露”的现象。这时候你不但需要注册事件处理程序,还需要在不需要捕获事件时“注销”事件处理处理程序。
比如说你在一个对象的执行代码中为一个外部对象的某个时间注册了事件处理程序(这个程序过程定义在这个对象范畴),当这个对象已经离开了作用域之后,它不能被GC销毁,因为这个对象的还有一个处理程序过程被那个尚未销毁的外部对象引用者。
比如说在游戏中,有成百上千的“精灵”监听了游戏消息网关传来的消息通讯事件。当这些精灵已经不再有存根的时候(比如说从地图上被删除、从各种前端窗口上也不再显示),它并不会被GC回收,因此它还在花时间监听消息。随着你不断地创建新的精灵,你另外创建了成千上万的精灵,你的内存就崩溃了。此时,每一个精灵被你从地图层移除时,你应该也从游戏消息网关的事件上注销事件处理方法,这样就能保证精灵对象在几秒钟内被GC自动回收了。
我们编写事件驱动程序时,大多数情况下都不需要注销事件处理。例如你动态产生一个TextBox控件实例,注册事件处理方法去监听其 KeyPress 事件。当你将来把它从 UI 容器(例如窗体的Controls集合)里移除的时候不需要注销此方法。因为这个对象的生命期比当前事件处理方法的生命期短。一般来说都是这样,所以是安全的。
------解决思路----------------------
当有数据回传的时候就会触发dataReceived。
串口在serialPort在用dataReceived事件
dataReceived事件是写在button2_Click中的,click事件应该在按下以后被触发,click中代码执行完应该结束了,为什么dataReceived事件会一直被触发
------解决思路----------------------
当你注册一个事件处理程序的时候,如果触发事件的对象的生存期比较长,那么就会产生一种“事件泄露”的现象。这时候你不但需要注册事件处理程序,还需要在不需要捕获事件时“注销”事件处理处理程序。
比如说你在一个对象的执行代码中为一个外部对象的某个时间注册了事件处理程序(这个程序过程定义在这个对象范畴),当这个对象已经离开了作用域之后,它不能被GC销毁,因为这个对象的还有一个处理程序过程被那个尚未销毁的外部对象引用者。
比如说在游戏中,有成百上千的“精灵”监听了游戏消息网关传来的消息通讯事件。当这些精灵已经不再有存根的时候(比如说从地图上被删除、从各种前端窗口上也不再显示),它并不会被GC回收,因此它还在花时间监听消息。随着你不断地创建新的精灵,你另外创建了成千上万的精灵,你的内存就崩溃了。此时,每一个精灵被你从地图层移除时,你应该也从游戏消息网关的事件上注销事件处理方法,这样就能保证精灵对象在几秒钟内被GC自动回收了。
我们编写事件驱动程序时,大多数情况下都不需要注销事件处理。例如你动态产生一个TextBox控件实例,注册事件处理方法去监听其 KeyPress 事件。当你将来把它从 UI 容器(例如窗体的Controls集合)里移除的时候不需要注销此方法。因为这个对象的生命期比当前事件处理方法的生命期短。一般来说都是这样,所以是安全的。
------解决思路----------------------
当有数据回传的时候就会触发dataReceived。