Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 延迟文本更改事件一秒钟wpf_C#_Wpf_Xaml - Fatal编程技术网

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

C# 延迟文本更改事件一秒钟wpf,c#,wpf,xaml,C#,Wpf,Xaml,我有一个事件ctc,当组合框中发生文本更改时触发,我想将其触发延迟一秒钟。 到目前为止,我编写了这段代码并将其放在主窗口中: 我是WPF的新手,我想知道在ElapsedEventHandlerparenthesis中输入什么,我输入了偶数名称,但我得到了一个错误。 我还需要为组合框的Xaml代码添加任何内容吗?这应该更好: 在.Net 4.0之后,您可以使用thank you ASh: await Task.Delay(1000); 这是一个非阻塞呼叫 然后,在这句话之后,只需更改文本即可

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

我是WPF的新手,我想知道在ElapsedEventHandlerparenthesis中输入什么,我输入了偶数名称,但我得到了一个错误。 我还需要为组合框的Xaml代码添加任何内容吗?

这应该更好:

在.Net 4.0之后,您可以使用thank you ASh:

await Task.Delay(1000); 
这是一个非阻塞呼叫

然后,在这句话之后,只需更改文本即可

如果您碰巧正在使用.Net 4:

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

await System.Threading.Tasks.Task.Run(() => System.Threading.Thread.Sleep(1000));
没有完整限定符:

await Task.Run(() => Thread.Sleep(1000));
这应该更好:

在.Net 4.0之后,您可以使用thank you ASh:

await Task.Delay(1000); 
这是一个非阻塞呼叫

然后,在这句话之后,只需更改文本即可

如果您碰巧正在使用.Net 4:

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

await System.Threading.Tasks.Task.Run(() => System.Threading.Thread.Sleep(1000));
没有完整限定符:

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

最简单的方法是使用@ASh提到的属性。我以前不知道,但我试过了,真是太棒了:

XAML:

其中SetProperty是INotifyPropertyChanged的实现


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

好的,最简单的方法是使用@ASh提到的属性。我以前不知道,但我试过了,真是太棒了:

XAML:

其中SetProperty是INotifyPropertyChanged的实现


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

愚蠢的问题,但我应该将其放在主窗口中的什么位置,或者放在我想延迟其执行的窗口中?如果您总是想延迟更改,请在将值设置为绑定属性之前,将其放在绑定属性集访问器中。您也可以延迟OnPropertyChanged。您使用mvvm还是纯代码隐藏?Task.Run with Thread.Sleep是一个糟糕的解决方案-始终使用Task.Delay或计时器。@EliArbel为什么?你能详细说明一下吗?@Mafii Thread.Sleep将保留由任务创建的线程。在线程池中全天运行,而Task.Delay将允许一个线程一个线程地重复使用此线程池,直到Delay过期。愚蠢的问题,但我应该把它放在主窗口的什么位置,甚至我想延迟它的执行?如果你总是想延迟更改,在为绑定属性设置值之前,请将其放在绑定属性集访问器中。您也可以延迟OnPropertyChanged。您使用mvvm还是纯代码隐藏?Task.Run with Thread.Sleep是一个糟糕的解决方案-始终使用Task.Delay或计时器。@EliArbel为什么?您能详细说明一下吗?@Mafii Thread.Sleep将保留由Task创建的线程。在线程池中完整运行,而Task.Delay将允许逐个线程池重复使用此线程,直到延迟过期。如果您使用的是binding和.net 4.5+,那么您还可以使用Delay属性为什么要延迟事件?你想达到什么目标?你能给我们提供更多的信息吗?当组合框中出现文本更改时,可能有更好的解决方案—您的意思是当所选项目发生更改时?不,当出现文本更改时,我为此创建了一个事件。当用户开始键入此事件并开始在数据库sql Server上查找匹配项时,我相信OP表示IsEditable=True,请参阅我的答案。如果您使用的是绑定和.net 4.5+,那么您也可以使用延迟属性为什么要延迟此事件?你想达到什么目标?你能给我们提供更多的信息吗?当组合框中出现文本更改时,可能有更好的解决方案—您的意思是当所选项目发生更改时?不,当出现文本更改时,我为此创建了一个事件。当用户开始键入时,会发生此事件,并开始在数据库sql Server上查找匹配项。我相信OP的意思是IsEditable=True,请参阅我的答案。