1

非常简单的复制应用程序 - 从 Visual Studio 中的模板创建了一个新的 Windows Phone 8 C# 应用程序,将图像添加到内容面板,然后订阅 NDEF 接近消息,如下所示:

// Constructor
    public MainPage()
    {
        InitializeComponent();

        ProximityDevice device = ProximityDevice.GetDefault();
        if (device != null)
        {
            device.SubscribeForMessage("NDEF", handler);
        }
    }

    private void handler(ProximityDevice sender, ProximityMessage message)
    {
        Debug.WriteLine("Received message");
        Dispatcher.BeginInvoke(() =>
            {
                myImage.Source = new BitmapImage(new Uri("Assets/test.png", UriKind.Relative));
            });
    }

第一个事件工作正常(图像源已成功更改)。但是,在此事件触发后,如果我触摸另一个 NFC 标签,它将不再触发。如果我删除更新图像源的调用,它会在每次触摸时触发。

我不明白为什么这里会有任何互动。我正在测试的手机是诺基亚 Lumia 620。

4

1 回答 1

0

只是在黑暗中拍摄:尝试保持对您的ProximityDevice某个地方的引用。使其成为类的成员并在构造函数中分配。

class MainPage : PhoneApplicationPage
{
    private ProximityDevice device;
    public MainPage()
    {
        InitializeComponent();

        device = ProximityDevice.GetDefault();
        if (device != null)
        {
            device.SubscribeForMessage("NDEF", handler);
        }
    }
    ...
}

正如评论中正确提到的那样,这是由垃圾收集器引起的,它收集ProximityDevice. 当new BitmapImage被创建时,内存消耗会增长,这会触发 GC 进程。这就是为什么当您不创建图像时没有这样的问题。

于 2013-07-03T16:01:33.850 回答