1

NFC デバイスの到着をリッスンしているこのアプリケーションがあります。これは、Microsoft の例に基づいています。

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 ページに移動して戻った後、デバイスが 1 つしか到着していない場合でも、DeviceArrived が複数回トリガーされます。

何らかの方法でロックする必要がありますか?

4

2 に答える 2

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

または、よりアーキテクチャ的に健全なソリューションの場合は、シングルトン クラスの静的イベントに登録し、それらを Messenger/EventAggregator/etc のメッセージに変換します。

于 2013-01-18T18:22:41.243 に答える
0

デバイスごとに、同じイベントに複数回登録しています。代わりに、イベントが以前に登録されているかどうかを確認して、一度だけイベントに登録します。

if (proximityDevice != null)
{
    if(proximityDevice.DeviceArrived == null)
       proximityDevice.DeviceArrived += ProximityDeviceArrived;
}
于 2013-01-18T09:43:00.990 に答える