用户输入后的C#时间延迟

Jos*_*eph 2 c# wpf time asynchronous delay

我有一个自定义控件(继承自TextBox),我正在使用.NET 4.0.

我需要做的是在用户完成输入后执行一些代码,例如在他停止输入后一秒钟.

每次Text更改时我都无法执行此代码块,这是为了提高效率,因为它有点耗时.理想情况下,每次用户启动和停止键入时都应调用一次.我以开始秒表Restart()内部OnTextChanged方法.

这是我的设置:

public class MyBox : TextBox
{
    private readonly Stopwatch timer;

    protected override void OnTextChanged(TextChangedEventArgs e)
    {
        timer.Restart();

        base.OnTextChanged(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能有效地做到这一点?异步线程的答案是什么?或者还有其他方式吗?

Cle*_*ens 7

您可以轻松地使用DispatcherTimer:

public class MyBox : TextBox
{
    private readonly DispatcherTimer timer;

    public MyBox()
    {
        timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(1) };
        timer.Tick += OnTimerTick;
    }

    protected override void OnTextChanged(TextChangedEventArgs e)
    {
        timer.Stop();
        timer.Start();
    }

    private void OnTimerTick(object sender, EventArgs e)
    {
        timer.Stop();
        // do something here
    }
}
Run Code Online (Sandbox Code Playgroud)