저는 미디어 플레이어를 만들고 있습니다. 검색하는 키워드를 입력하는 등 실시간 검색 기능을 추가하여 노래 등을 검색했습니다 (WMP 실시간 검색과 같은 일부 기능).별도의 UI 스레드에서 WPF 컨트롤?
검색 프로세스 중에 데이터베이스에 액세스하고 IEnumerable을로드하는 작업은 BackGroundProcess를 통해 다른 스레드에서 수행됩니다. UI는 UIElement의 디스패처를 호출하여 업데이트됩니다.
이 과정은 다소 빠르지 만 텍스트 상자에 검색 키워드를 입력 할 때 약간의 지연이있는 것처럼 보입니다. 이는 Listbox.ItemSource 업데이트에 약간의 시간이 걸리는 것입니다. 즉, "Adele"을 검색하고 싶다고 말하면 "a"를 입력하면 검색 기능이 "A"에 대한 결과를로드하지만 단어 "Adele"을 입력 할 때 " d ""e ""l ""e "이 문자 사이에 약간의 지연이 있습니다.
이 검색 프로세스 중에 UI 업데이트를 중지하면 검색 프로세스가 매우 부드럽게 보입니다. 이것은 목록 상자가 스레드를 잠그고 있다는 것을 의미하기 때문에 Listbox가있는 동안 나머지 플레이어 UI가 거기에 붙어 있습니다. 처리가 완료되었습니다.
목록 상자 컨트롤을 다른 UI 스레드에 넣을 수 있으면 목록 상자를로드하는 데 걸리는 시간과 관계없이 플레이어의 부드러운 흐름을 유지할 수 있다고 생각합니다. FYI : 데이터 가상화가 있습니다 & ListBox에 UI 가상화가 있습니다.
ListBox 컨트롤을 다른 UI 스레드에 넣을 수 있습니까? WPF, C#을 사전 : ASP.NET에서
사실 내가 본 적이있는 실현 가능한 방법은 없습니다. – Servy
.net 4.5 사용?여기에 당신을 위해 쉬운 승리가 될 수있는 바인딩에 좋은 Delay 속성이 있습니다. 기본적으로 100ms와 같은 값으로 설정됩니다. 사용자가 해당 시간 동안 타이핑을 멈 추면 (또는 Enter 또는 텍스트 상자를 누르면 바인딩 만 업데이트됩니다. 포커스를 잃음) – Andy
하나 뿐인 UI 스레드가 있습니다. –