我正在制作一个媒体播放器,现在我已经添加了实时搜索功能来搜索歌曲等(类似于WMP的实时搜索),即在输入关键词时进行搜索。
在搜索过程中,通过BackGroundProcess在另一个线程上访问数据库并加载IEnumerable。通过调用UIElement的分派程序来更新UI。
这个过程非常快,但是当您在文本框中输入搜索关键字时,似乎会有一些小延迟,这是因为Listbox.ItemSource更新需要一些时间。 例如,假设您想搜索"Adele",当您输入"a"时,搜索函数会加载"A"的结果,但是当我们输入整个单词"Adele"时,显示"d" "e" "l" "e"需要一些时间,并且这些字母之间存在轻微的延迟。
在这个搜索过程中,当我停止更新UI时,搜索过程似乎非常平滑,这只意味着对我来说Listbox正在锁定线程,因此当Listbox完成其处理时,播放器的其余UI都被卡住了。
因此,我相信如果我可以将Listbox控件放到另一个UI线程上,无论加载Listbox需要多长时间,都可以保持播放器的流畅性。 FYI:数据虚拟化已经存在,ListBox具有正在工作的UI虚拟化。
如何将ListBox控件放到另一个UI线程上? WPF,C#
提前感谢:)
在搜索过程中,通过BackGroundProcess在另一个线程上访问数据库并加载IEnumerable。通过调用UIElement的分派程序来更新UI。
这个过程非常快,但是当您在文本框中输入搜索关键字时,似乎会有一些小延迟,这是因为Listbox.ItemSource更新需要一些时间。 例如,假设您想搜索"Adele",当您输入"a"时,搜索函数会加载"A"的结果,但是当我们输入整个单词"Adele"时,显示"d" "e" "l" "e"需要一些时间,并且这些字母之间存在轻微的延迟。
在这个搜索过程中,当我停止更新UI时,搜索过程似乎非常平滑,这只意味着对我来说Listbox正在锁定线程,因此当Listbox完成其处理时,播放器的其余UI都被卡住了。
因此,我相信如果我可以将Listbox控件放到另一个UI线程上,无论加载Listbox需要多长时间,都可以保持播放器的流畅性。 FYI:数据虚拟化已经存在,ListBox具有正在工作的UI虚拟化。
如何将ListBox控件放到另一个UI线程上? WPF,C#
提前感谢:)