2013-01-14 2 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 개의 어댑터가 있으므로 케이블을 연결할 때마다 활성화 된 (활성화 된) 어댑터 수만큼의 이벤트를 얻는 것처럼 보입니다. 우리는 어댑터 중 하나를 사용하지 않도록 설정하고 이벤트 수를 정확히 하나씩 부검하여 테스트했습니다. 우리는 단절을위한 이벤트 하나만 얻는 것 같습니다.

이벤트가 두 번 이상 발생하는 또 다른 이유는 네트워크가 실제로 끊어지고 다시 연결된다는 사실입니다.

어떤 경우에도 구현의 현실과 네트워크 연결과 관련된 일반적인 신뢰성을 다루기 위해 코드를 방어 적으로 작성해야합니다.

관련 문제