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);
    }
}
我怎样才能有效地做到这一点?异步线程的答案是什么?或者还有其他方式吗?
您可以轻松地使用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
    }
}