【发布时间】:2011-08-20 00:22:28
【问题描述】:
我正在使用 .NET 4 串行端口类和 DataReceived 处理程序。
在 DataReceive 处理程序中,我从串行端口中删除处理程序,处理数据,并在函数末尾重新添加处理程序。
try
{
serial_port.datareceived -= new serialdatareceivedeventhandler(ondatareceived);
// readline and process data
}
catch (exception ex)
{
}
finally
{
serial_port.datareceived += new serialdatareceivedeventhandler(ondatareceived);
}
这种用法有什么后果(如果有的话)?它似乎工作得很好,虽然我没有长期测试过。我应该研究不同的方法吗?如果可能,请提供一个简单的代码示例/大纲。谢谢。
【问题讨论】:
-
你为什么要这样做?避免重新进入?顺便说一句:这样你可能会丢失一些数据......
-
让我想知道框架是否真的可能或阻止了重入
-
@yahia - 是的,以避免在处理收到的数据时重新进入。数据丢失不是问题,因为设备是手动激活的,因此我永远不会丢失数据。
-
@BoxerJoe 删除监听器并不能防止重入问题。如果可以重入,则该事件可能会在您移除处理程序之前触发两次(或者由于竞争条件或不一致的内部委托操作,它甚至可能在您移除处理程序后触发)。
标签: .net serial-port