2014-07-12 88 views
-1

當我從另一個頁面傳遞值時,如何每秒增加一個值?Windows Phone - 增加一個值

下面是一些代碼,我從上一頁獲得的值+我添加了計時器。

問題是必須爲Tick創建的EventHandler不能設置爲OnNavigatedTo。

public partial class Page1 : PhoneApplicationPage 
    { 
    DispatcherTimer timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(.1) }; 


    public Page1() 
    { 

      InitializeComponent(); 

      this.timer.Tick += new EventHandler(OnNavigatedTo); 
      this.Loaded += new RoutedEventHandler(OnNavigatedTo); 


    } 



    private void ButtonToPage1(object sender, RoutedEventArgs e) 
    { 
     App app = Application.Current as App; 
     MessageBox.Show(app.storeValue); 
    } 

    private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e) 
    { 


    } 

    protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     base.OnNavigatedTo(e); 
     string QueryStr = ""; 
     NavigationContext.QueryString.TryGetValue("myNumber", out QueryStr); 
     int test = (int.Parse(QueryStr)); 

    } 
+0

你嘗試過這麼遠嗎?你嘗試過'System.Timers.Timer(雙倍間隔)'http://msdn.microsoft.com/en-us/library/system.timers.timer(v=vs.110).aspx – Ma3x

+0

我試過這個。但問題是,我不能增加它,因爲我需要一個事件(或方法)。 OnNavigatedTo我無法使用這個。我試過這個:http://developer.nokia.com/community/wiki/Implement_timers_in_Windows_Phone – alexdagee

+0

你是什麼意思,你需要一個事件?只需使用lambda。除此之外,沒有理由不應該發生事件。 –

回答

1

試試這個:

DispatcherTimer tmr; 
int test; 
protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    base.OnNavigatedTo(e); 
    string QueryStr = ""; 
    NavigationContext.QueryString.TryGetValue("myNumber", out QueryStr); 
    test = (int.Parse(QueryStr)); 
    LoadTimer(); 
} 

public void LoadTimer() 
{ 
    tmr = new DispatcherTimer(); 
    Deployment.Current.Dispatcher.BeginInvoke(() => 
    { 
     tmr.Interval = new TimeSpan(0, 0, 1); 
     tmr.Tick += tmr_Tick; 
     tmr.Start(); 
    }); 
} 

void tmr_Tick(object sender, EventArgs e) 
{ 
    test++; 
    TextBlock.Text = test.ToString(); 
} 
+0

謝謝你的回答。它的工作原理,但它沒有使用我從前一頁得到的值;) – alexdagee

+0

它確實..看到代碼.. im傳遞QueryStr的值來測試變量,你從查詢字符串 –

+0

mhh你測試它在一個WP?我只是測試它,它從1開始。也許在開始時的「int test」是一個問題,因爲它將值設置爲0? – alexdagee

0

目前尚不清楚爲什麼你不能只按照你的評論中鏈接的教程。我想你誤解了它,並嘗試使用OnNavigatedTo()方法來處理Tick事件。是的,這是行不通的,你不應該這樣做。

你應該簡單地附上事件處理方法OnNavigatedTo

private int myNumber; 

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    base.OnNavigatedTo(e); 
    string QueryStr = ""; 
    NavigationContext.QueryString.TryGetValue("myNumber", out QueryStr); 
    myNumber = (int.Parse(QueryStr)); 

    DispatcherTimer newTimer = new DispatcherTimer(); 
    newTimer.Interval = TimeSpan.FromSeconds(1); 
    //attach event handler method for Tick event 
    newTimer.Tick += OnTimerTick; 
    //or attach anonymous method so you don't need OnTimerTick() method : 
    //newTimer.Tick += (o, e) => { myNumber++; }; 
    newTimer.Start(); 
} 

void OnTimerTick(Object sender, EventArgs args) 
{ 
    myNumber++; 
} 
+0

感謝您的答案。我可以在哪裏顯示文本塊中的遞增值?在導航還是在ontimertick? – alexdagee

+0

OnTimerTick如此顯示的值始終是最新的 – har07