非常简单的repro应用程序 - 在Visual Studio中从模板创建了一个新的Windows Phone 8 C#应用程序,在内容面板中添加了一个Image,然后订阅了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。
答案 0 :(得分: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进程。这就是为什么当你不创建图像时没有这样的问题。