2013-01-18 75 views
1

我有這個應用程序正在監聽NFC設備的到來。它基於的例子從微軟:接近事件多次註冊

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"; 
    } 
} 

這是在我的MainPage.xaml中實現。我的問題是,如果我導航到另一個頁面,然後按回退按鈕(即時不覆蓋功能),我現在看到了多個事件。

因此,當一個設備瀏覽其註冊一次,我去過其他的.xaml頁之後匆匆回DeviceArrived被觸發,即使只有一臺設備到達多次之前到達。

我必須以某種方式鎖定它嗎?

回答

1

你應該按照靜態事件基於XAML框架的設計模式是在的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

對於要註冊到同一事件不止一次每個設備。而是通過檢查事件是否已經註冊過,只註冊一次事件。

if (proximityDevice != null) 
{ 
    if(proximityDevice.DeviceArrived == null) 
     proximityDevice.DeviceArrived += ProximityDeviceArrived; 
}