簡體   English   中英

Silverlight / WP7-在其他頁面上觸發導航和事件

[英]Silverlight/WP7 - Navigation and events triggering on other pages

我的基本問題是,基於網絡活動,我在離開的頁面上觸發了一些事件,這些事件在我認為舊表格被銷毀時會引起問題。

更詳細的信息:我正在編寫與網絡播放器通信的Windows Phone應用。 我的App類中有一個通訊類的靜態實例,因此所有表單都可以共享連接,我的所有表單都可以訂閱該連接並在該表單中處理結果。 從主菜單中,您可以選擇一種類型的源,它會打開文件瀏覽表單,該表單將在導航時刷新列表框,取消后退按鈕並刷新新內容以模擬文件導航,直到您成為根文件夾為止。 該應用程序不知道您是否單擊文件或文件夾,當媒體開始播放時會收到一條網絡消息,並注意該消息,然后導航至“播放”表單。 到目前為止,我一直在使用所有.Navigate的工具,並且在我從主菜單的另一個分支添加新來源之前,它一直很好用。 盡管新的來源完全不同,但設備會發送許多相同的通用命令,這在當前上下文中僅意味着其他含義。 在訪問了我的文件瀏覽器表單並轉到新的源之后,來自網絡的播放命令(這意味着現在有其他含義)會使我從以前的源跳入舊的“播放”表單,就好像我仍在使用文件瀏覽器表單,這不是故意的。

因此,我已經嘗試了很多事情,並且現在可以正常工作了,但是這是消息,我失去了一些功能。 目前,我從使用所有.navigates(也使用后退按鈕替代)更改為嘗試使用堆棧和navigation.goback。 我在需要時使用App中的全局變量傳遞變量,然后將我的網絡偵聽器從表單中取消掛鈎,返回,然后將它們連接到新表單的偵聽器中,並定位到其中。 我認為這存在計時問題,盡管在某些情況下,由於更改時我需要向媒體盒發送命令,最終導致再次觸發錯誤的事件處理程序。 我認為,最簡單的解決方案(如果可能的話),即使我每次從舊的表單中導航,它的處理程序等都被銷毀並且我完全不需要使用堆棧時,盡管它可行,但它們使我工作的方式是,自己處理所有后退按鈕。

我知道這是一個冗長的描述,如果您能走到目前為止,謝謝您,希望它有意義。 有人對我的工作有任何建議嗎?

附帶說明一下,我是一位長期自學成才的VB程序員,他一直陷於.net 2.0 / winforms中,而我現在已經轉向C#,OOP和XAML來編寫我的第一個Windows Phone應用程序,因此可能我在做一些愚蠢的事情或忽略了明顯的事情...

可能是因為某些內容保留了對該表格的引用。 最常見的原因是事件處理程序。

因此,如果您的靜態類公開了一個事件,並且您以表單的形式訂閱了該事件,則當表單關閉/導航時,您必須取消訂閱該事件,否則該表單將保留在內存中。

如果不是這種情況,請尋找其他獲取對表單的引用而不釋放它的東西。

在處理從UI發送的命令時,最有可能的問題是基於不良的應用程序體系結構。

當您說“發送許多相同的通用命令,這在當前上下文中僅意味着其他含義”。 您很可能會發現問題的根源。

解決方法是,您可以定義通信類實現的接口。 每個表單都有它自己的在通信類實例上調用的方法。

如果確實從電話頁面收到了一條命令,那么該命令將不再可見,請不要對其進行處理。

您可以存儲導航歷史記錄,以始終知道哪個頁面是允許向通信類發送命令的唯一頁面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM