Как создать секундомер в реальном времени универсальное приложение для Windows Phone 8.1

В настоящее время я создаю приложение секундомера для Windows Phone 8.1, я использую класс секундомера, но я не могу найти способ постоянно обновлять экранный таймер. Iv пытался использовать циклы while для обновления текстового блока во время работы секундомера, но это не обновляется до тех пор, пока метод не завершится и не вызовет бесконечный цикл.

    private void Button_Click(object sender, RoutedEventArgs e)
    {

        if (!stopwatch.IsRunning)
            _sw.Start();

        while (stopwatch.IsRunning)
            this.sw.Text = stopwatch.Elapsed.ToString();
    }

    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        stopwatch.Stop();
    } 

person XCdev    schedule 12.04.2015    source источник


Ответы (2)


Используйте DispatcherTimer, установите Interval на 1 секунду и в событии Tick обновите TextBlock.

person Igor Kulman    schedule 12.04.2015

Проблема в том, что среды с графическим интерфейсом обычно работают не так, как вы предполагаете (продолжайте обновлять пользовательский интерфейс и прослушивать взаимодействие с пользователем во время выполнения вашего цикла). Вы должны взглянуть на эту страницу MSDN — речь идет о WPF, а не о Windows XAML, но основы те же.

На высоком уровне ваше приложение запускает непрерывный цикл, который делает примерно следующее:

  1. Проверка пользовательского ввода
  2. Запустить обработчики событий
  3. Обновить макет
  4. Визуализация нового пользовательского интерфейса
  5. Вернуться к № 1

Таким образом, если вы запустите бесконечный цикл while на шаге 2, пользовательский интерфейс никогда не обновится, и приложение никогда не получит событие Click для кнопки Стоп. Вы должны сделать что-то вроде DispatcherTimer (как предложил @Igor Kulman), который периодически проверяет значение секундомера и обновляет пользовательский интерфейс.

Я бы рекомендовал чаще, чем один раз в секунду; использование TimeSpan.FromMilliseconds(33) даст вам 30 кадров в секунду.

person Peter Torr - MSFT    schedule 13.04.2015