2016-07-31 90 views
0

當我使用這段代碼時MessageOutput.Text被設置了2次,這意味着代碼被執行了兩次,因爲我沒有在其他地方設置MessageOutput.Text。每當我收到新消息時,都會調用此方法,並且應該更新UI。爲什麼會發生這種情況,我該如何解決?Event Handler不止一次執行

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

你確定這個方法沒有被調用兩次嗎? – pquest

+0

當我收到一個新消息'listenerSocket.MessageReceived + = MessageReceived;'時調用這個方法,在這種情況下它會顯示兩次收到的消息。 – Stefan

+0

這並沒有改變我的問題。在「MessageReceived」的第一行放置一個斷點,看看你是否兩次點擊它 – pquest

回答

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): 「你好」 收到來自遠程對端的數據(遠程地址:172.16.80.1,遠程端口:22113):「你好」 從遠程對端接收數據(遠程地址:10.168.177.14,遠程端口:22113):「你好」

請在cmd中輸入ipconfig /all檢查IPv4地址這些交換機:

enter image description here

+0

非常感謝,我所要做的就是禁用我的「vEthernet(內部以太網端口Windows Phone模擬器內部交換機)」。 – Stefan

-1

我懷疑的問題是在這條線。

listenerSocket.MessageReceived += MessageReceived; 

請添加綁定此事件處理程序的代碼。因爲這條線特別執行了2次。所以這就是爲什麼你的事件處理程序被執行兩次。所以你必須弄清楚爲什麼這個事件綁定了兩次,你的問題將得到解決。 希望這個幫助!

+0

這不是一個答案。您需要獲得足夠的聲譽才能發表評論。 – Enigmativity

+0

我不知道回答你的問題的聲望,但感謝你的評論。 –

+0

對不起,我不明白你的意思。你應該刪除這個答案。 – Enigmativity