все! Я искал лучшее, что мог, и не нашел именно ту помощь, которую искал.
Проблема
AutoCompleteTextbox останавливается и «ест» символы во время выполнения запроса
Запрашиваемая
Функциональность Mimic Google Instant
Фон
Перво-наперво: C #, WPF, .NET 4.0
Хорошо, теперь это не так, я пытаюсь найти лучший способ реализовать динамическое текстовое поле автозаполнения, которое запрашивает в базе данных результаты после каждой напечатанной буквы.
Следующий код выполняется при возникновении события TextChanged в AutoCompleteTextBox:
public void Execute(object sender, object parameter)
{
//removed some unnecessary code for the sake of being concise
var autoCompleteBox = sender as AutoCompleteTextBox;
var e = parameter as SearchTextEventArgs;
var result = SearchUnderlyings(e.SearchText);
autoCompleteBox.ItemsSource = result;
}
Теперь предположим, что SearchUnderlyings(e.SearchText)
занимает в среднем 600-1100 мс - за это время текстовое поле зависает и «съедает» любые нажатые клавиши. Это досадная проблема, с которой я столкнулся. По некоторым причинам LINQ в SearchUnderlyings(e.SearchText)
работает в потоке GUI. Я попытался делегировать это в фоновый поток, но все тот же результат.
В идеале я хотел бы, чтобы текстовое поле работало так, как работает Google Instant, но я не хочу «убивать» потоки до того, как сервер / запрос сможет вернуть результат.
Кто-нибудь имеет опыт или может предложить какое-нибудь руководство, которое позволит мне делать запросы при вводе текста, не останавливая графический интерфейс или не убивая сервер?
Спасибо, ребята!