C# 如何在后台线程中访问TreeViewItem的标记属性?
我有一个wpf窗口中的树视图。对于树视图中的每个树视图项,我将相关对象存储在其标记属性中。我正在树视图上实现搜索功能。我在另一个线程中运行搜索,以避免阻塞UI。在搜索操作期间,我搜索存储在树状视图项的标记属性中的对象中的信息。但问题是标记属性在不同的线程中不可访问。我不想使用树状视图的dispatcher来访问tag属性,因为程序将在UI线程和后台线程之间切换,以进行每次标记访问。那么在后台运行搜索就没有意义了。我能做什么 我能做什么 除了最初在其上创建的线程(即UI/dispatcher线程)之外,您无法从任何其他线程访问C# 如何在后台线程中访问TreeViewItem的标记属性?,c#,wpf,multithreading,treeview,treeviewitem,C#,Wpf,Multithreading,Treeview,Treeviewitem,我有一个wpf窗口中的树视图。对于树视图中的每个树视图项,我将相关对象存储在其标记属性中。我正在树视图上实现搜索功能。我在另一个线程中运行搜索,以避免阻塞UI。在搜索操作期间,我搜索存储在树状视图项的标记属性中的对象中的信息。但问题是标记属性在不同的线程中不可访问。我不想使用树状视图的dispatcher来访问tag属性,因为程序将在UI线程和后台线程之间切换,以进行每次标记访问。那么在后台运行搜索就没有意义了。我能做什么 我能做什么 除了最初在其上创建的线程(即UI/dispatcher线程)
树视图项的标记
属性
因此,您必须使用dispatcher将访问属性的代码打包回UI线程,在UI线程上运行所有代码,或者使用不同的方法,不使用标记
属性来存储有关相关对象的信息
这些恐怕是你唯一的选择。我想你用错了树状视图。wpf树视图(与winforms树视图相反)将与每个项目的datacontext中的视图模型一起使用。您需要自己维护视图模型的层次结构,然后可以根据需要访问和搜索它们。一个好的,虽然古老的读物是这样的:最好的方法就是不要使用Tag
属性来存储这些信息。WPF是在考虑模型视图概念的情况下构建的,最好不要通过在视图(Tag
)元素中存储模型数据来对抗这个概念。完全没有理由需要这样做。只需在开始任务时传递要搜索的文本。当选择在任务完成之前更改时,请取消选择并创建另一个。