了解导航:旧页面仍然有活动事件订阅者?

时间:2015-09-21 21:44:10

标签: c# windows-runtime windows-store-apps

我刚刚在Windows应用商店应用中遇到了这个问题,这是一个简单的例子:

App.cs: Global timer

MainPage: Subscribes to Global Timer, button to create a local timer, button to goto page 2

Page2: Subscribes to Global Timer, button to create local timer, back button

在MainPage上,单击按钮以创建本地计时器。我看到它和全球计时器滴答作响。

转到第2页。仍然可以看到来自主页上订阅的全局计时器和本地计时器的刻度。启动第2页的本地计时器。

在MainPage上返回。现在看到5个计时器在运行:

The original MainPage subscribed to Global Timer
the original MainPage subscribed to local timer
A new subscription to Global Timer
The Page2 subscribed to Global Timer
The Page2 subscribed to it's local timer

我意识到我可以使用navigatedto / from事件来订阅/取消订阅全局计时器。有点痛苦,因为在我的真实例子中,我可以在全球类的不同页面中订阅数十个不同的事件。有点难以找到在本地计时器按钮中创建的计时器,因为按钮外没有引用计时器。

订阅者是否保持以前的页面存活或者这是正常的吗?我查看了NavigationCacheMode模式,默认情况下每次都会创建一个新实例。我假设一切都已基本清除,这就是为什么在页面之间进行时必须保存文本框等的状态。

解决这个问题的唯一方法就是在导航时取消订阅所有全局事件,并保留一个类级变量,以便我可以像我的“本地计时器”那样引用其中一个?

1 个答案:

答案 0 :(得分:0)

感谢KooKiz的回答,使用计时器作为快速测试似乎是一个红色的鲱鱼。我只是在导航时以及任何本地计时器取消订阅全球课程中的所有活动,而不用担心其他任何事情。