如何在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.");
}

我真的希望你能帮助我!

如何在WP8的另一个页面中重写方法

这些方法没有被第二个页面继承,只是您没有正确地取消订阅消息。

您是否尝试使用SubscribeFromMessage()的返回值而不是message.SubscriptionId来调用StopSubscribingForMessage() ?