Control.ValueChanged fire with time offset - PullRequest
       0

Control.ValueChanged fire with time offset

0 голосов
/ 09 января 2019

У меня есть несколько элементов управления C #, таких как NumericUpDown или TextBox, и я хочу запустить событие со смещением в несколько секунд. В прошлом я выполнял это поведение с Timer. Код, над которым я работаю, использует BackgroundWorker для достижения этой цели. В некоторых других местах я нашел нормальные потоки для построения этого поведения.

Причиной, по которой может потребоваться смещение, является, например, трудоемкий метод, который выполняется после каждого ValueChange объекта NumericUpDown. Если пользователь нажимает несколько раз на стрелке вниз, важен только последний щелчок, потому что это значение, которое пользователь хотел получить в конце.

То, как я привык к этому, выглядит следующим образом

private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
    /*
     * Designer Code
    this.eventOffsetTimer.Interval = 500;
    this.eventOffsetTimer.Tick += new System.EventHandler(this.eventOffsetTimer_Tick);
    */
    eventOffsetTimer.Stop();
    eventOffsetTimer.Start();
}

private void eventOffsetTimer_Tick(object sender, EventArgs e)
{
    eventOffsetTimer.Stop();
    //Time consuming stuff...
    MessageBox.Show(numericUpDown1.Value.ToString());
}

Мне было интересно, как лучше всего выполнить смещение за несколько секунд до запуска события. Есть ли встроенный способ, который Microsoft рекомендует использовать? Запуск и остановка таймера - это простая вещь, но, похоже, существует способ, поощряемый Microsoft.

1 Ответ

0 голосов
/ 09 января 2019

Вы должны использовать .Restart(). Сначала он запускает таймер, а затем снова запускает его.

Советы: вам не нужно использовать .Stop() с .Restart()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...