2016-07-31 24 views
0

Wenn ich diesen Codeschnipsel verwende Der MessageOutput.Text wird 2 mal gesetzt, was bedeutet, dass der Code zweimal ausgeführt wird, da ich den MessageOutput.Text nirgendwo sonst setze. Immer wenn ich eine neue Nachricht erhalte, wird diese Methode aufgerufen und soll die Benutzeroberfläche aktualisieren. Warum passiert das und wie kann ich das beheben?Event Handler wird mehr als einmal ausgeführt

async void MessageReceived(DatagramSocket socket, DatagramSocketMessageReceivedEventArgs eventArguments) 
    { 
     uint stringLength = eventArguments.GetDataReader().UnconsumedBufferLength; 
     string receivedMessage = eventArguments.GetDataReader().ReadString(stringLength); 

     await Dispatcher.RunAsync(CoreDispatcherPriority.Normal,() => 
     { 
      MessageOutput.Text += (receivedMessage + "\n"); 
     }); 
    } 
+0

Sind Sie sicher, dass die Methode nicht zweimal aufgerufen wird? – pquest

+0

Diese Methode wird aufgerufen, wenn ich eine neue Nachricht "listenerSocket.MessageReceived + = MessageReceived" erhalte und in diesem Fall die empfangene Nachricht zweimal anzeigt. – Stefan

+0

Das ändert meine Frage überhaupt nicht. Setzen Sie einen Unterbrechungspunkt in die erste Zeile von 'MessageReceived' und sehen Sie, ob Sie ihn zweimal drücken. – pquest

Antwort

1

Warum ist das passiert und wie kann ich es beheben

Der mögliche Grund ist, gibt virtual network switches in Ihrem System mehr.

Zum Beispiel gibt es drei virtuelle Netzwerk-Switches in meinem Windows 10, gehen Sie einfach zu Systemsteuerung-> Netzwerk- und Internet-> Netzwerkverbindungen. enter image description here

Ich werde zur gleichen Zeit drei Meldungen erhalten:

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

Empfangene Daten von Remote-Peer (Remote Adresse: 169.254.146.116, Remote Port: 22113): "Hallo" Received Daten von der Gegenstelle (Remote-Adresse: 172.16.80.1, Remote-Port: 22113): "Hallo" Empfangene Daten von der Gegenstelle (Remote-Adresse: 10.168.177.14, Remote-Port: 22113): "Hallo"

Bitte geben ipconfig /all in cmd die IPv4-Adressen für diese Schalter zu überprüfen:

enter image description here

+0

Vielen Dank, alles, was ich tun musste, war mein "vEthernet (Interner Ethernet Port Windows Phone Emulator Interner Switch)" zu deaktivieren. – Stefan

-1

Ich vermute, dass das Problem in dieser Linie ist.

Fügen Sie bitte den Code hinzu, an den Sie diesen Event-Handler gebunden haben. Weil diese Linie ausnahmsweise zweimal ausgeführt wurde. Aus diesem Grund wird Ihr Event-Handler zweimal ausgeführt. Sie müssen herausfinden, warum dieses Event doppelt gebunden ist und Ihr Problem gelöst werden könnte. Hoffe diese Hilfe !!!

+0

Dies ist keine Antwort. Sie müssen genug Ansehen haben, um Kommentare zu schreiben. – Enigmativity

+0

Ich bekomme nicht den Ruf für die Beantwortung Ihrer Frage, aber DANKE für Ihren Kommentar. –

+0

Entschuldigung, ich verstehe nicht, was du meinst. Sie sollten diese Antwort löschen. – Enigmativity