NetworkInformation L’evento NetworkStatusChanged è stato triggersto due volte

Sto ascoltando un cambio di rete nella mia applicazione WinRT usando quello che credo sia l’approccio raccomandato.

Mi iscrivo all’evento utilizzando questo codice. (Ho provato in un certo numero di posti ma attualmente lo ho nel metodo OnNavigatedTo della pagina).

 NetworkInformation.NetworkStatusChanged += NetworkInformation_NetworkStatusChanged; 

Quindi nel metodo OnNvaigatedFrom lo rimuovo:

 NetworkInformation.NetworkStatusChanged -= NetworkInformation_NetworkStatusChanged; 

Quando rimuovo il cavo di rete, l’evento NetworkInformation_NetworkStatusChanged viene NetworkInformation_NetworkStatusChanged correttamente. Tuttavia, quando ricollego (torna online) l’evento viene triggersto due volte e i miei dati (memorizzati localmente mentre offline) vengono caricati due volte sul server.

Qualcuno l’ha mai visto prima / sa perché potrebbe succedere – mi sta facendo impazzire.

Molte grazie Chris

Ricordo che questo è un problema. Sembra che lo sia ancora.

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

Per risolvere il tuo problema, tieni traccia della disponibilità della rete con un flag e aggiorna solo se lo stato della rete precedente non era disponibile.

Durante i test, abbiamo scoperto che riceverai una sola volta per adattatore disponibile. Abbiamo 5 adattatori quindi ogni volta che ricolleghiamo un cavo sembra che riceviamo un evento tante volte quante sono gli adattatori attivi (abilitati). Abbiamo verificato ciò disabilitando uno degli adattatori e il numero degli eventi ridotto esattamente di uno e viceversa. Sembra che otteniamo solo un evento per la disconnessione.

L’altro motivo per cui l’evento viene triggersto più di una volta è il fatto che la tua rete effettivamente scende e si riconnette.

In ogni caso è su di voi a scrivere il codice in modo difensivo per affrontare la realtà dell’implementazione e l’inaffidabilità generale associata alle connessioni di rete.