Секундомер всегда выводит 00: 00: 00: 00 - PullRequest
0 голосов
/ 24 ноября 2018

В моей программе WPF есть кнопка с таким кодом:

**Outside the Click event:**
bool started = false;

**In the Click Event:**
if (started == false)
{
    started = true;

    btnStart.Content = "Stop";

    //---------Clock Code-------------
    stopwatch.Start();
}
else
{
    started = false;
    btnStart.Content = "Start";

    //---------Clock Code------------

    stopwatch.Stop();
    // Get the elapsed time as a TimeSpan value.
    TimeSpan ts = stopwatch.Elapsed;

    // Format and display the TimeSpan value.
    string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", 
      ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10);
    tbDuration.Text = elapsedTime;
}

Но если я запустил программу и нажал кнопку, она всегда отображает 0. Я не могу отладить ее,потому что Visual Studio вылетает ...

Что я делаю не так?

Или у вас есть более эффективные способы сделать это?Я просто хочу измерить время между двумя нажатиями и вывести его в текстовое поле.

Мне также хотелось бы, чтобы время отслеживалось в реальном времени в текстовом поле.

Спасибо

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Решение: (от @TheGeneral) Поместите секундомер в элемент экземпляра:

private Stopwatch stopwatch = new Stopwatch();
0 голосов
/ 24 ноября 2018

Если ваш код выглядит примерно так, он работает нормально:

    public Stopwatch stopwatch = new Stopwatch();
    bool started = false;

    private void button1_Click(object sender, EventArgs e)
    {

        if (started == false)
        {
            started = true;

            button1.Text = "Stop";

            //---------Clock Code-------------

            stopwatch.Start();




        }
        else
        {
            started = false;
            button1.Text = "Start";

            //---------Clock Code------------

            stopwatch.Stop();
            // Get the elapsed time as a TimeSpan value.
            TimeSpan ts = stopwatch.Elapsed;

            // Format and display the TimeSpan value.
            string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
                ts.Hours, ts.Minutes, ts.Seconds,
                ts.Milliseconds / 10);

            MessageBox.Show(elapsedTime);
        }
    }
...