邻近事件被注册多次
本文关键字:注册 事件 | 更新日期: 2023-09-27 17:54:37
我有这个应用程序,它正在侦听NFC设备的到来。这是基于微软的例子:
http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh465221.aspxWindows.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被触发多次,即使只有一个设备到达。
我必须以某种方式锁定它吗?
在基于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/等的消息。
对于每个设备,您将多次注册到同一事件。相反,只需通过检查事件之前是否已被注册来只注册一次事件。
if (proximityDevice != null)
{
if(proximityDevice.DeviceArrived == null)
proximityDevice.DeviceArrived += ProximityDeviceArrived;
}