2012-10-23 51 views
2

我讀到,WP7使用backstack來表示應用程序的後退導航。WP7頁面似乎活着

在我的應用程序中,有

  1. 第1頁共2頁:有局部變量int COUNT1和DispatcherTimer 定時器1
  2. 第2頁:有局部變量int COUNT2和DispatcherTimer 定時器

TIMER1在第1頁回調用於登錄的count1 ++值

定時器2的c係數page2中的allback用於記錄count2 ++的值。

問題1 在頁1,我啓動timer1,然後導航到page2。

我以爲page1被推到了backstack並且它是無效的。但是timer1仍然以count1遞增的方式運行?

問題2在第2頁中,我啓動了timer2並返回到page1。

我以爲page2是配置的。但是timer2仍然以count2遞增的方式運行?

+0

爲什麼downvote me?我有非常明確的問題,我想知道WP7中的頁面機制,因爲它強烈影響我的應用程序 – onmyway133

回答

4

頁面可能不在視圖中,但它仍在運行 - 只是沒有繪製到屏幕上。返回頁面時,您擁有的任何變量仍將存在。同樣,類似DispatcherTimer的任何內容都將繼續存在,將繼續保留,直到您停止爲止。

一個直接的問題是,如果你沒有保存對定時器的引用 - 如果你不這樣做,你將無法阻止它!無論如何,這樣的事情會工作:

protected void override OnNavigatedFrom(Object sender, NavigationEventArgs e){ 
    if (myTimer != null){ timer.Stop();} 
    e.OnNavigatedFrom(sender,e); 
} 

protected void override OnNavigatedTo(Object sender, NavigationEventArgs e){ 
    //create, or turn on your timer, etc. 
    e.OnNavigatedTo(sender,e); 
} 

這個想法基本上是你如何描述:當離開頁面,'暫停'計時器。當你回來時,打開計時器。

問題2:

當您創建一個計時器,該變量它可以是本地的,但是從定時器產生的event是全球性的 - 當你做你需要它dispose用它。即不要不僅停止了,但除去事件本身 -

myTimer.Tick -= onTimerTick; // where onTimerTick is the name of your Event 

最後,

當你的應用程序變得Deactivated,你的計時器停止和殺害。您應該確保在發生這種情況時重新啓動/重新創建任何定時器。如果你保持計數的東西,請記住存儲計數,以便您可以跟蹤用戶離開的位置。

+0

謝謝。你的回答滿足問題1但是在問題2中,我認爲page2應該被處置,但是timer2仍然可以使用count2? – onmyway133

+0

@Yamamoto增加了一些信息 - 讓我知道你是否需要更多信息。 :) –

+0

感謝您的答案。但是我認爲當回到page1時,page2必須被殺死,並且count2也被殺死,但是timer2仍然可以使用count2? – onmyway133