私は今、メディア プレーヤーを作っています.. 曲などを検索するためのリアルタイム検索機能を追加しました (WMP リアルタイム検索のようなもの) つまり、キーワードを入力している間に検索が行われます。
検索プロセス中、データベースへのアクセスと IEnumerable の読み込みは、BackGroundProcess を介して別のスレッドで行われます。UI は、UIElement のディスパッチャを呼び出すことによって更新されます。
このプロセスはかなり高速ですが、テキスト ボックスに検索キーワードを入力している間は、Listbox.ItemSource の更新に時間がかかるため、少しラグがあるようです。たとえば、「Adele」を検索するとします。「a」と入力すると、検索機能は「A」の結果をロードしますが、「Adele」という単語全体を入力しているため、「d」を表示するのに時間がかかります。 " "e" "l" "e" で、これらの文字の間にはわずかなずれがあります。
この検索プロセス中に、UI の更新を停止すると、検索プロセスが非常にスムーズに見えます。これは、リストボックスがスレッドをロックしていることを意味するだけです。そのため、リストボックスの処理が完了している間、プレーヤーの UI の残りの部分はそこにとどまります。 .
したがって、Listbox コントロールを別の UI スレッドに配置できれば、Listbox の読み込みにかかる時間に関係なく、プレーヤーのスムーズなフローを維持できると思います。参考までに: データ仮想化があり、ListBox には UI 仮想化が機能しています
ListBox コントロールを別の UI スレッドに配置するにはどうすればよいですか? WPF、C#
前もって感謝します :)