我正在製作一個媒體播放器,現在..我添加了一個實時搜索功能來搜索歌曲等(有些東西像WMP實時搜索),即當您輸入關鍵字搜索發生時。獨立的UI線程上的WPF控件?
在搜索過程中,訪問數據庫並加載IEnumerable是通過BackGroundProcess在另一個線程上完成的。通過調用UIElement的調度器來更新UI。
此過程相當快,但是當您在文本框中輸入搜索關鍵字時,似乎有一個小滯後,這是因爲Listbox.ItemSource更新需要一些時間。 即你想搜索「阿黛爾」,當你輸入「a」時,搜索功能會加載「A」的結果,但是當我們輸入整個單詞「阿黛爾」時,有一段時間顯示「 d「」e「」l「」e「,這些字母之間有一點點滯後。
在此搜索過程中,當我停止更新UI時,搜索過程看起來非常流暢,這隻對我意味着Listbox鎖定了線程,所以當Listbox是完成其處理。
所以我相信如果我可以將Listbox控件放到另一個UI線程中,我可以保持播放器的平穩流動,而不管加載列表框的時間如何。 供參考:數據Virutualization有&列表框有UI虛擬化正在工作
我怎樣才能把ListBox控件到另一個UI線程? WPF,C#
感謝提前:)
有效地,你不能...至少不能以我見過的任何可行的方式。 – Servy
使用.net 4.5?現在有一個很好的綁定延遲屬性,這可能是一個簡單的勝利在這裏,基本上設置爲100毫秒,它只會更新綁定,如果用戶停止輸入的時間長度(或按下輸入或文本框失去焦點) – Andy
只有一個UI線程。 –