带时间偏移量的Control.ValueChanged火

时间:2019-01-09 08:54:46

标签: c# .net winforms

我有一些C#控件,例如NumericUpDownTextBox,并希望以偏移几秒钟的时间触发事件。过去,我是通过Timer完成此行为的。我正在使用的代码使用BackgroundWorker完成此操作。在其他一些地方,我找到了正常的线程来建立这种行为。

例如可能需要偏移量的原因是一种耗时的方法,该方法在每次NumericUpDown的ValueChange之后执行。如果用户在向下箭头上单击几次,则最后一次单击才是重要的,因为这是用户最终想要的值。

我以前处理此问题的方式如下

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 :(得分:0)

您应该使用.Restart()。它首先释放Timer,然后再次启动。

提示:您无需将.Stop().Restart()一起使用