【发布时间】:2012-01-20 08:13:14
【问题描述】:
我的基本问题是,当我认为旧表单被销毁时,我根据网络活动在我离开的页面上触发了事件。
更多详细信息:我正在编写一个与网络播放器通信的 Windows Phone 应用程序。我的 App 类中有一个通信类的静态实例,因此所有表单都可以共享连接,并且我的所有表单都订阅它并在该表单中处理结果。从主菜单中,您可以选择一种类型的源,它会打开一个文件浏览表单,在您导航时刷新列表框,取消后退按钮并刷新新内容以模拟文件导航,直到您成为根文件夹。该应用程序不知道您是否单击了文件或文件夹,当媒体开始播放时它会收到一条网络消息并观察它,然后导航到“播放”表单。到目前为止,我一直在使用所有 .Navigate,它一直运行良好,直到我在主菜单中添加了另一个分支以获取新源。尽管新源完全不同,但设备发送了许多相同的通用命令,这些命令在当前上下文中只是意味着其他东西。在访问我的文件浏览器表单并转到我的新源之后,来自网络的播放命令(现在意味着其他东西)会导致我从以前的源跳转到旧的“播放”表单,就好像我还在文件浏览器表单,这不是预期的。
所以我尝试了很多东西,现在它可以工作了,但它是消息,我失去了一些功能。目前,我从使用所有.navigates(也在后退按钮覆盖中)更改为尝试使用堆栈和navigation.goback。我在需要时使用 App 中的全局变量传递变量,然后将我的网络侦听器从表单中解开,返回,然后将它们连接到新表单的侦听器中。我认为存在时间问题,因为在某些情况下,我需要在媒体框发生变化时向它发送命令,最终再次触发错误的事件处理程序。我认为最简单的解决方案,如果可能的话,而且我认为它会起作用的方式是,如果每次我从旧表单导航时,它的处理程序等都被破坏了,我根本不必使用堆栈,自己处理所有的后退按钮。
我知道这是一个很长的描述,如果你能做到这一点,我希望它有某种意义。有人对我能做什么有任何建议吗?
顺便说一句,我是一名长期自学成才的 VB 程序员,一直被困在 .net 2.0/winforms 中,我刚刚转向 C#、OOP 和 XAML 来编写我的第一部 Windows Phone应用程序,所以很可能我在做一些愚蠢的事情或忽略了一些明显的事情......
【问题讨论】:
标签: c# silverlight windows-phone-7 windows-phone-7.1