Не знаю, правильно ли я понял вопрос ... Если вы имеете дело с несколькими потоками и по какой-то причине хотите прекратить предыдущую тему, вы можете проверить в новой теме, жив ли предыдущий поток, и отказаться от его. действие внезапно ... Если это не то, что вы ожидаете, не могли бы вы подробно описать свой вопрос?
Обновление:
Теперь я очень хорошо поняла ваш вопрос. Даже я работаю над такой проблемой, но БД находится в памяти. В вашем случае, если ваша БД поддерживает LIMIT, вы можете ограничить количество результатов, возвращаемых запросом, используя
LIMIT lowerLimit upperLimit
Теперь в методе вашего потока используйте 'for' для циклического просмотра наборов результатов и в каждой итерации проверяйте, изменился ли текст текстового поля. Если он был изменен, то прервите цикл, очистите список, перейдите к началу метода потока и выполните тот же процесс, используя тот же поток, но текстовый фильтр отличается.
КОД PSEUDO:
do
isLoop = false
clear the collection that is bound to the listbox
from db, get the record count
for: loop 0 to recordcount increment batchsize
get chuncks of data from db of size batchsize
add the data to collection [using dispatcher.invoke]
if textbox text changed
isLoop = true
break for-loop
endif
endfor
while(isLoop)
Надеюсь, это поможет.