2013-01-18 2 views
1

NFC 장치 도착을 수신하는이 응용 프로그램이 있습니다. 그것은 Microsoft에서 예제의 기반으로 : 이것은 내에서 MainPage.xaml에서 구현근접 이벤트가 여러 번 등록되었습니다.

http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh465221.aspx

Windows.Networking.Proximity.ProximityDevice proximityDevice; 

public MainPage() 
{ 
    InitializeComponent(); 

    proximityDevice = Windows.Networking.Proximity.ProximityDevice.GetDefault(); 

    if (proximityDevice != null) 
    { 
     proximityDevice.DeviceArrived += ProximityDeviceArrived; 
    } 
    else 
    { 
     MessageTextBlock.Text += "Failed to initialize proximity device.\n"; 
    } 
} 

. 내 문제는 내가 다른 페이지로 이동 한 다음 뒤로 버튼 (함수를 덮어 쓰지 않는 메신저)을 눌러 돌아가서 여러 이벤트가 발생했다는 것입니다.

그래서 탐색하기 전에 장치가 도착하면 장치를 한 번 등록하고 다른 .xaml 페이지를 방문한 후 한 장치가 도착하더라도 DeviceArrived가 여러 번 트리거됩니다.

어떤 식 으로든 잠글 수 있습니까?

답변

1

디자인 패턴은 OnNavigatedTo 방법 재정에 등록하고 OnNavigatedFrom 방법 재정에의 등록을 취소하는 것입니다.

private ProximityDevice proximity = ProximityDevice.GetDefault(); 

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    if (proximity != null) 
    { 
     proximity.DeviceArrived += proximity_DeviceArrived; 
    } 

    base.OnNavigatedTo(e); 
} 

protected override void OnNavigatedFrom(NavigationEventArgs e) 
{ 
    if (proximity != null) 
    { 
     proximity.DeviceArrived -= proximity_DeviceArrived; 
    } 

    base.OnNavigatedFrom(e); 
} 

또는 대안보다 구조적으로 사운드 솔루션

, 싱글 톤 클래스의 정적 이벤트에 등록하고 메신저/EventAggregator/등을위한 메시지로 사람들을 번역합니다.

0

각 장치에 대해 동일한 이벤트에 두 번 이상 등록하는 중입니다. 대신 이벤트가 전에 등록되었는지 여부를 확인하여 한 번만 이벤트에 등록하십시오. 정적 이벤트에 대한 XAML 기반의 프레임 워크에서 다음해야

if (proximityDevice != null) 
{ 
    if(proximityDevice.DeviceArrived == null) 
     proximityDevice.DeviceArrived += ProximityDeviceArrived; 
} 
관련 문제