在我的WP8应用程序中,我使用了一个搜索方法,当TexBox中的文本发生变化时进行搜索。现在我需要修改这个搜索方法。当用户在TextBox中快速输入时,搜索应该仅在用户完成输入后执行。也就是说,搜索方法不应该为每个文本更改执行一次。这是否可能?请帮帮我。
可以的。基本上你需要一个计时器 - 或者更确切地说,每个按键都需要一个计时器。最简单的方法可能是:每次用户按下一个键,就启动一个计时器。计时器应该记住此时已经输入的文本。 当计时器触发时,只有当当前文本与“计时器启动时的文本”相同时,才执行搜索操作。 这种方法的一个潜在缺点是,如果用户输入了“foo”,计时器启动了,用户输入了“d”,然后删除了那个“d”,接着计时器触发,它将执行搜索,尽管已经有过输入和删除的操作。如果您认为这是不可取的,可以使用一个计数器来代替 - 只需使用一个表示已输入按键数量的int型变量。当计时器启动时记住这个值,并在计时器触发时检查该值是否与之前相同即可。或者,如果搜索是异步且廉价的,可以在每次按键时立即进行搜索...但是当您收到结果后,如果用户已经输入了新的内容,则要么完全忽略搜索,要么在本地筛选出仍然有效的结果。(也可以使用一个单一的计时器来解决这个问题,使得当用户输入任何一个按键时,计时器要么启动,要么延迟触发。个人认为这样更复杂,但这取决于您。)
你可以考虑使用Reactive extension库,它是一种异步通信方式,并提供了许多关于异步活动的抽象。它是基于推送的机制,即每当数据可用时,感兴趣的订阅者将被通知。它支持取消问题请求等。有关示例,请参见101 Rx。