将文本更改事件延迟一秒钟wpf

本文关键字:延迟 一秒钟 wpf 事件 文本 | 更新日期: 2023-09-27 17:57:31

我有一个事件(ctc),当组合框中发生文本更改时会触发,我想将其触发延迟一秒钟。到目前为止,我写了这段代码,并将其放入MainWindow:

Timer aTimer = new Timer();
    aTimer.Interval = 1000;
    aTimer.Elapsed += new ElapsedEventHandler(ctc);
    aTimer.Enabled = true;

我是WPF的新手,我想知道在ElapsedEventHandler括号里放什么,我放了偶数名,但我遇到了一个错误。我还需要为组合框向Xaml代码添加任何内容吗?

将文本更改事件延迟一秒钟wpf

好吧,最简单的方法是使用上面提到的@ASh的Delay属性。我以前不知道,但我尝试过,它很神奇:

XAML:

 <ComboBox IsEditable="True" Text="{Binding ComboBoxText, Mode=OneWayToSource, Delay=1000}">
    <ComboBoxItem Content="item1" />
    <ComboBoxItem Content="item2" />
    <ComboBoxItem Content="item3" />
</ComboBox>

视图模型:

private string comboBoxText;
public string ComboBoxText
{
    get { return this.comboBoxText; }
    set
    {
        if (this.SetProperty(ref this.comboBoxText, value))
        {
            Trace.WriteLine("*** New text: " + value);
            // RunDatabaseSearch(value);
        }
    }
}

其中SetPropertyINotifyPropertyChanged的实现。

观看Visual Studio中的输出窗口,文本将出现在用户最后一次键入的一秒钟之后。

这应该更好:

在.Net 4.0之后,您可以使用(谢谢ASh):

await Task.Delay(1000); 

这是一个非阻塞呼叫。

然后,在这个陈述之后,只需更改您的文本。

如果你碰巧在使用.Net 4:

以下是.Net 4.0 中延迟的示例实现

还有Thread.Sleep,但这似乎是一种糟糕的做法,因为它需要花费很多资源(感谢Eli Arbel,Sam):

await System.Threading.Tasks.Task.Run(() => System.Threading.Thread.Sleep(1000));

没有完整限定符:

await Task.Run(() => Thread.Sleep(1000));