首页 > 解决方案 > Control.ValueChanged 触发时间偏移

问题描述

我有一些 C# 控件,例如NumericUpDownorTextBox并且想要以几秒的偏移量触发事件。过去,我使用Timer. 我正在编写的代码使用 aBackgroundWorker来完成此操作。在其他一些地方,我发现了正常的线程来构建这种行为。

例如,可能需要偏移量的原因是一种耗时的方法,该方法在 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());
}

我想知道最好的做法是在事件触发之前完成几秒钟的偏移量。是否有微软鼓励使用的内置方式?启动和停止计时器是一件简单的事情,但似乎有微软鼓励的方法。

标签: c#.netwinforms

解决方案


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

提示:您不需要使用.Stop()with.Restart()


推荐阅读