我有一个TextBox,用户可以在其中输入搜索词.它绑定到我的视图模型中的字符串Term属性.我希望在内容发生变化时进行搜索查询.但我想在一个单独的线程中进行查询并延迟.
例如当用户键入字母时,我想等待0.3秒,如果用户在此时间内(0.3秒)更改输入,计时器将重置并重新开始.否则,我启动一个新线程并执行搜索查询.在执行查询时,如果用户再次更改术语,则中止prev查询并重新开始.
我知道如何在带有线程和Timer类的windows-forms中执行此操作.但我是WPF的新手,我正在寻找是否有为WPF线程功能指定的方法(或者可能是一种具有更好性能的方式).
你知道吗?你能帮助我吗?
最佳答案 您可以使用
DispatcherTimer
.在每个按键上,如果计时器已经运行,请停止计时器,然后启动计时器.我相信(你应该检查一下!)这将重置它.
如果它触发,则接着在文本框中获取当前值并开始在单独的线程中执行操作(例如,如果您使用的是.NET 4,或者使用BackgroundWorker,或者只是创建一个新线程,则使用Task.Factory.StartNew) .
基本上,将“新线程”部分与“我真的想要做某事”部分分开,将所有内容保留在UI线程中,直到您确定自己确实想要做某事为止(并且您知道它的价值)想用).