如何在WP8的另一个页面中重写方法
本文关键字:重写 方法 另一个 WP8 | 更新日期: 2023-09-27 18:08:53
我正在开发一个应用程序,涉及通过ProximityDevice类读取NFC标签。其思想是,当在main_page上成功读取标记时,它将导航到second_page,在那里将完成标记内容的所有处理。当它到达second_page时,应用程序必须不能再读取任何标签,除非它返回到main_page。
问题是当应用程序导航到second_page时,它仍然读取标记并执行我在main_page上声明的方法。似乎这些方法是在second_page上继承的。
有没有办法:(1)完全禁用读取接近装置,必要时重新启用;或(2)覆盖从main_page继承的方法?
我试过了:(1)在导航到下一页之前使用stopSubscribingForMessage,但它仍然读取后续标签;(2)声明在second_page上读取标签的新方法——这些新方法和main_page上的方法一起被执行。
下面是我的代码:
(main_page)public MainPage()
{
InitializeComponent();
device = ProximityDevice.GetDefault();
if (device != null)
{
device.DeviceArrived += ProximityDeviceArrived;
}
else
{
MessageBox.Show("Failed to initialize proximity device.");
}
}
public void ProximityDeviceArrived(Windows.Networking.Proximity.ProximityDevice device)
{
device.SubscribeForMessage("NDEF", ProcessDeviceMessage);
}
public void ProcessDeviceMessage(ProximityDevice sender, ProximityMessage message)
{
//reads tag content
sender.StopSubscribingForMessage(message.SubscriptionId);
NavigationService.Navigate(new Uri("/Result.xaml?tagContent=" + tagContent, UriKind.Relative));
}
(second_page)protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedTo(e);
string tagContent = NavigationContext.QueryString["tagContent"];
//process tag content
device = ProximityDevice.GetDefault();
if (device != null)
{
device.DeviceArrived += ProximityDeviceArrived;
}
else
{
MessageBox.Show("Failed to initialize proximity device.");
}
}
public void ProximityDeviceArrived(Windows.Networking.Proximity.ProximityDevice device)
{
device.SubscribeForMessage("NDEF", ProcessDeviceMessage);
}
public void ProcessDeviceMessage(ProximityDevice sender, ProximityMessage message)
{
Debug.WriteLine("You tapped your tag again. I will do nothing.");
}
我真的希望你能帮助我!
这些方法没有被第二个页面继承,只是您没有正确地取消订阅消息。
您是否尝试使用SubscribeFromMessage()
的返回值而不是message.SubscriptionId
来调用StopSubscribingForMessage()
?