在工作线程中使用VisualTree进行全文搜索

时间:2010-01-18 08:00:29

标签: wpf multithreading visual-tree

我正在使用WPF来显示复杂数据(想想报告)。我现在需要进行全文搜索。我们目前通过走视觉树寻找文本块来做到这一点。看来这需要在UI线程上完成,是吗?这里的问题是,在整个UI阻塞期间找到下一个匹配可能需要一段时间。

有没有办法规避这个问题?我可以尝试使用UI自动化,但是一旦找到匹配项,我该如何突出显示它?使用UI自动化我没有得到UI元素的实际对象实例的引用,因此我不能在它上面放置一个装饰器。

WPF中的全文搜索通常如何实现? XPS查看器如何做到这一点?

2 个答案:

答案 0 :(得分:1)

你是正确的,因为查询可视树必须在UI线程上完成,并且UI自动化只能以类似于坐在计算机上的人的方式与应用程序交互,所以它不是可以访问实际的控件(就像那个人没有)。

解决此问题的正确方法是将UI置于一边,并在数据源(MVVM中的模型)中搜索文本。毕竟,您真的想要搜索UI显示的信息,而不是UI本身。

答案 1 :(得分:0)

wpf会自动将inotifypropertychanged编组到ui线程上,以便您可以在另一个线程上进行处理并设置属性。如何执行此操作取决于代码的结构。例如你在使用mvvm吗?如果不是,你可能会使用调度员调用你的ui上的任何方法。如果你回复一些关于你的代码结构的信息,我应该能够提供更加不同的答案。如果您不使用mvvm,如果您使用wpf数据绑定与非ui数据源进行处理,您仍然可以避免显式封送。