У меня есть несколько элементов управления 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.