我正在實現一個自動完成控件。每次用戶在輸入中鍵入新字符時,查詢都會觸發。爲了測試,我創建了一個大型數據庫,其中平均查詢大約需要5秒鐘執行。中止ado.net查詢
因爲查詢需要5秒鐘,執行我執行查詢的一個新的線程:
// execute the following lamda expression when user enters characters to textbox
textBox1.TextChanged +=(x,eventArgs)=>{
// execute query on separate thread
new Thread(new ThreadStart(() =>
{
ObservableCollection = MyEntities.Entities.Products.Where(p => p.Name.Contains(inputText));
})).Start();
};
的ObservableCollection和inputText的是綁定到我的文本框和列表屬性。
問題是,如果用戶鍵入兩個字符,我的程序將同時運行兩個線程。我如何中止查詢?
的事情,我在想:
創建一個布爾變量IsQueryRuning並設置它等於真正quen查詢開始,當線程結束等於假。如果一個新的查詢將被執行並且IsQueryRuning = true,那麼我可以設置ObservableCollection = null並導致一個exeption。然後,我會用try catch塊重新調用它。我認爲,技術是不是最好的方法..
編輯:
設置屬性集合= NULL有時會導致一個例外,它沒有一些其他時間...