事件处理程序不止一次执行

时间:2016-07-31 13:22:49

标签: c# events event-handling

当我使用这段代码时MessageOutput.Text设置了2次,这意味着代码执行了两次,因为我没有在其他任何地方设置MessageOutput.Text。每当我收到一条新消息时,都会调用此方法,并且应该更新UI。为什么会发生这种情况?我该如何解决?

Optional other As Range = 0

2 个答案:

答案 0 :(得分:1)

  

为什么会发生这种情况,我该如何解决?

最可能的原因是,您的系统中有多个virtual network switches

例如,我的Windows 10中有三个虚拟网络交换机,只需转到控制面板 - >网络和Internet - >网络连接enter image description here

我会同时收到三条消息:

Debug.WriteLine("Received data from remote peer (Remote Address: " +
                    eventArguments.RemoteAddress.CanonicalName + ", Remote Port: " +
                    eventArguments.RemotePort + "): \"" + receivedMessage + "\"");

从远程对等方接收数据(远程地址: 169.254.146.116 ,远程端口:22113):“Hello” 从远程对等方接收数据(远程地址: 172.16.80.1 ,远程端口:22113):“Hello” 从远程对等方接收数据(远程地址: 10.168.177.14 ,远程端口:22113):“Hello”

请在cmd中键入ipconfig /all以检查这些交换机的IPv4地址:

enter image description here

答案 1 :(得分:-1)

我怀疑问题出在这一行。

listenerSocket.MessageReceived += MessageReceived;

请添加绑定此事件处理程序的代码。因为异常这条线执行了2次。这就是为什么你的事件处理程序被执行两次。因此你必须弄清楚为什么这个事件被绑定两次并且你的问题将被解决。 希望这有帮助!!!