我有一个
TextBox
,用户可以在其中输入搜索词。它与我的view-model
中的string Term
属性绑定。当其内容更改时,我想进行搜索查询。但我想要在一个单独的线程上进行查询,并且带有一定的延迟。
例如,当用户输入一个字母时,我想等待0.3秒,如果用户在此期间(0.3秒)内更改输入,则计时器重置并重新开始。否则,我将启动一个新线程并进行搜索查询。在查询正在执行时,如果用户再次更改术语,则中止先前的查询并重新开始。
我知道如何使用线程和Timer
类在Windows窗体中实现此目的。但我是WPF
的新手,我正在寻找是否有专门针对WPF线程功能的方法(或者可能有更好性能的方法)。
你有什么想法吗?你能帮我吗?
WPF
非常陌生,只有187个SO点。你的解决方案似乎比Robaticus的更好,但我需要一些代码来理解它:D 我在考虑,我应该只有一个线程(而不是在每个查询上都有一个新线程,这似乎更好),然后运行或中止它。这是真的吗?同时很高兴和你交流。非常感谢。 - amiry jdDispatcherTimer
。然而,有一种情况可能会导致逻辑错误:1:术语更改,2:timer.stop()
和timer.start()
3:用户在0.3秒内未更改术语,因此4:查询开始调用,5:当查询完成后,我再次停止计时器,但是6:调用查询需要一段时间(例如2秒),7:在查询正在调用时,用户更改了术语,8:发生timer.stop()
(之后也是timer.start()
),但只有计时器停止了,查询仍在运行!我该如何中止它?请问您有任何想法吗? - amiry jd