2013-01-14 52 views
2

我正在使用我認爲是推薦的方法來偵聽WinRT應用程序中的網絡更改。NetworkInformation NetworkStatusChanged事件觸發兩次

我使用此代碼訂閱活動。 (我曾在很多地方嘗試過,但目前我在頁面OnNavigatedTo方法中有)。

NetworkInformation.NetworkStatusChanged += NetworkInformation_NetworkStatusChanged; 

然後在OnNvaigatedFrom方法予移除:

NetworkInformation.NetworkStatusChanged -= NetworkInformation_NetworkStatusChanged; 

當我刪除了網絡電纜的NetworkInformation_NetworkStatusChanged事件被正確地燒製。但是,當我插回(在線返回)時,事件被激發兩次,並且我的數據(在離線時本地存儲)被上傳到服務器兩次。

有沒有人遇到過這個/知道爲什麼它可能會發生 - 它使我發瘋。

非常感謝 克里斯

回答

0

我記得這是一個問題。似乎仍然是。

http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/520ea5e2-cc17-486d-815e-528ca041d77f/

解決您的問題,跟蹤的網絡可用性與一個標誌,如果以前的網絡狀況是無法只更新。

+0

我想我發佈得太快了,這實際上可能不再是一個問題。事件發生了兩次,但看起來是與我沒有打破的線程異常相關聯。現在我正在使用UI線程(http://stackoverflow.com/questions/11122312/interface-marshalled-for-a-different-thread-in-c-sharp-on-windows-8)它似乎是固定。 – user1706388

+0

太棒了!感謝您的跟進 – kindasimple

0

在測試中,我們發現每個可用適配器都會收到一次。我們有5個適配器,所以每當我們插入一根電纜時,我們似乎都會獲得與活動(啓用)適配器相同數量的事件。我們通過禁用其中一個適配器和事件數減少了一個,反之亦然來測試。看起來我們只能得到一個斷開連接的事件。

您事件不止一次發射的另一個原因是您的網絡確實斷開並重新連接。

在任何情況下,它都會對您編寫代碼進行防禦性處理,以實現與網絡連接相關的實施和一般不可靠性。