簡體   English   中英

在文本框中實時搜索

[英]real-time search in textbox

我有一個文本框,用戶在其中輸入搜索字符串,然后程序在后台工作線程上搜索該字符串。

現在,我正在重新使用相同的舊線程(並且僅在線程完成/取消后才等待進行新搜索)。

如果我每次想進行搜索時都可以創建一個新線程,我會容易得多,因為這樣一來,在進行搜索之前,我不需要等待另一個線程完成。

每次更改文本時都會進行搜索(事件textbox.TextChanged)-這意味着有很多新的線程和已處置的線程...

這是可行的策略,還是我應該繼續重用同一線程(為大量潛在的錯誤留出空間)?

這是C#4.0中的Win-form項目

您正在尋找的被稱為線程池

從某種意義上說,它重用了線程,這與您所做的基本上是一樣的。 除了線程很多而且重用對於調用程序而言是隱藏的。 這里有更多解釋。

同樣,Peter關於使用Task的建議類似於使用Thread Pool ,因為默認情況下Tasks在Thread Pool運行。

並且不要忘記,您仍然必須解決一個問題,即同時運行多個搜索,並且它們可能無法完成才能啟動,也無法為當前搜索提供有效的數據。 最好在開始新搜索之前先“取消”當前搜索。

我有一些建議:

  1. 如果您具有自然的異步搜索系統(例如Entity Framework async API),則使用Task ;如果不使用ThreadPool ,則使用Task

  2. textbox.TextChanged事件中啟動一個計時器,並在每次文本更改時將其重置,如果計時器到達該計時器結束(1秒),然后嘗試搜索,則這種方法避免了在快速鍵入abc時搜索aababc ,搜索abc

  3. 將一個時間戳記附加到每個搜索線程,並在准備好結果后將其保存在您的UI中,如果某個線程的結果已准備好並且當前結果時間戳大於准備就緒的時間戳記,則忽略該結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM