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

本文关键字:活动 事件 导航 | 更新日期: 2023-09-27 18:13:53

我只是在一个Windows Store应用程序中被这个绊倒了,这里是一个简化的例子:

App.cs:全局定时器MainPage:订阅全局定时器,按钮来创建一个本地定时器,按钮去页面2Page2:订阅全局定时器,按钮创建本地定时器,返回按钮

在MainPage上,它点击按钮创建一个本地计时器。我看到它和全局计时器滴答作响。

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

返回主页。现在看到5个计时器正在运行:

原始MainPage订阅了全局定时器原来的MainPage订阅了本地定时器对全局计时器的新订阅Page2订阅了全局定时器Page2订阅了它的本地定时器

我意识到我可以使用navigatedto/from事件订阅/取消订阅全局计时器。这有点麻烦,因为在我的实际示例中,我可以从全局类订阅不同页面中的数十个不同事件。查找在本地计时器按钮中创建的计时器有点困难,因为在按钮之外没有对它的引用。

订阅用户是否保留了之前的页面,还是这是正常的?我研究了NavigationCacheMode模式,默认情况下每次都会创建一个新实例。我假设所有内容基本都已清除,这就是为什么在页面之间切换时必须保存文本框等的状态。

在导航时取消订阅所有全局事件,并保持类级别变量,以便我有一个像我的"本地计时器"一样的一次性引用,这是唯一的方法吗?

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

多亏了KooKiz提供的答案,使用计时器作为快速测试似乎已经成为一种转移注意力的方法。我将在导航方式时取消订阅全局类中的所有事件,以及任何本地计时器,而不用担心其他任何事情。