Jas*_*ith 8 c# events serial-port raiseevent
下面是我的代码,首先是我提出事件的地方,第二部分是我在另一个类中使用它的地方.它看起来很简单,但是日志显示即使事件被提升一次,事件也会在消耗此事件的类上触发20次以上.有任何想法吗?
IBSerialPort
类:
public delegate void PacketReceivedHandler(object sender, PacketReceivedEventArgs e);
public event PacketReceivedHandler OnPacketReceived;
public class PacketReceivedEventArgs : EventArgs
{
public Packet PacketReceived { get; private set; }
public PacketReceivedEventArgs(Packet packet)
{
PacketReceived = packet;
}
}
// raise event
if (OnPacketReceived != null)
{
Log("This is only called ONCE!");
PacketReceivedEventArgs args = new PacketReceivedEventArgs(data);
OnPacketReceived(this, args);
}
Run Code Online (Sandbox Code Playgroud)
使用IBSerialPort
和使用其OnPacketReceived
事件的类:
IBSerialPort ibSerialPort = null;
..
if (ibSerialPort == null)
{
Log("This is only called once");
ibSerialPort = IBSerialPort.Instance;
ibSerialPort.OnPacketReceived += ibSerialPort_OnPacketReceived;
}
void ibSerialPort_OnPacketReceived(object sender, IBSerialPort.PacketReceivedEventArgs args)
{
Log("This is called ~25 times!!!!");
}
Run Code Online (Sandbox Code Playgroud)
试试这个,这将取消注册任何普通用户:
ibSerialPort.OnPacketReceived -= ibSerialPort_OnPacketReceived; // unregister
ibSerialPort.OnPacketReceived += ibSerialPort_OnPacketReceived; //register
Run Code Online (Sandbox Code Playgroud)
这被调用了多少次?如果多次调用此函数,那么您的事件将被多次调用。
ibSerialPort.OnPacketReceived += ibSerialPort_OnPacketReceived;
Run Code Online (Sandbox Code Playgroud)
作为测试,您可以在添加委托之前将其删除:
ibSerialPort.OnPacketReceived -= ibSerialPort_OnPacketReceived;
ibSerialPort.OnPacketReceived += ibSerialPort_OnPacketReceived;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8952 次 |
最近记录: |