locked
Как правильно на странице периодически вызывать метод RRS feed

  • Вопрос

  • Требуется с определенной периодичностью вызывать метод на странице, на странице есть GridView у него в Loaded делаю это:

    TimerCallback timercallback = this.Update;
    AutoResetEvent autoevent = new AutoResetEvent(false);
    Timer stateTimer = new Timer(timercallback, autoevent, 0, 30000);

    Метод Update:

    private async void Update(object state)
    {
      await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => x());
    }

    Когда страница грузится первый раз то все работает, после того как открою другую страницу и вернусь обратно, этот метод больше не вызывается...

    15 мая 2014 г. 19:10

Ответы

  • Вот я дурак, искать тоже надо уметь :) набрал в гугле "periodic run method c# windows store apps" и первый же результат дал мне то что надо! Сделал вот по этой инструкции, все гуд! LXGDARK, все равно спасибо!
    • Помечено в качестве ответа KollegOFF 17 мая 2014 г. 12:05
    17 мая 2014 г. 12:04
  • Создайте таймер в классе приложения, а не страницы. При открытии страницы подписывайте таймер из класса приложения к нужной процедуре.

    Если же и сама процедура не должна быть привязана к странице, то еще проще, просто все вышеописанное реализуйте в классе приложения


    VB.Net - WPF, WinRT, WP

    • Помечено в качестве ответа KollegOFF 17 мая 2014 г. 12:05
    16 мая 2014 г. 10:47

Все ответы

  • Создайте таймер в классе приложения, а не страницы. При открытии страницы подписывайте таймер из класса приложения к нужной процедуре.

    Если же и сама процедура не должна быть привязана к странице, то еще проще, просто все вышеописанное реализуйте в классе приложения


    VB.Net - WPF, WinRT, WP

    • Помечено в качестве ответа KollegOFF 17 мая 2014 г. 12:05
    16 мая 2014 г. 10:47
  • А можете разжевать, а то что то не получается. Я делал так, в классе App объявил Timer и TimerCallback. В конструкторе App в TimerCallback записал пустой метод, там же инициализировал Timer с этим TimerCallback. При открытии страница в TimerCallback добавляю нужный метод, при уходе с нее убираю его, не срабатывает ни разу.

    // Так объявил:
    public static TimerCallback Callback { get; set; }
    private static Timer Timer { get; set; }
    
    // Это в конструкторе делаю:
    App.Callback = (object state) => { };
    AutoResetEvent autoevent = new AutoResetEvent(false);
    App.Timer = new Timer(App.Callback, autoevent, App.Period, App.Period);
    
    // Так добавляю:
    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
     base.OnNavigatedTo(e);
     App.Callback += this.Update;
    }
    
    // Так убираю:
    protected override void OnNavigatedFrom(NavigationEventArgs e)
    {
     base.OnNavigatedFrom(e);
     App.Callback -= this.Update;
    }

    Не так?

    16 мая 2014 г. 21:44
  • Вот я дурак, искать тоже надо уметь :) набрал в гугле "periodic run method c# windows store apps" и первый же результат дал мне то что надо! Сделал вот по этой инструкции, все гуд! LXGDARK, все равно спасибо!
    • Помечено в качестве ответа KollegOFF 17 мая 2014 г. 12:05
    17 мая 2014 г. 12:04