我有兩個列表框,一個是主人,另一個是孩子。當主索引上的索引發生變化時,子列表框將被正確填充與主索引有關的記錄。當一位主人花費很長時間獲取所有記錄,並且在完成獲取記錄之前,用戶點擊另一位需要較少時間填寫的主人,我的問題即將到來。發生的是,最終,即使用戶不在該主人身上,花費較長時間的主人也會填充子列表框。取消winforms中的工作線程
我一直在使用BackgroundWorker線程來做填充。
bw_LoadAll.DoWork += new DoWorkEventHandler(bg_LoadAllWork);
bw_LoadAll.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bg_LoadAllWorkCompleted);
bw_LoadAll.WorkerSupportsCancellation = true;
我訂閱了SelectedIndexChanged事件的主人和我設置取消等於真:
bw_LoadAll.CancelAsync();
這裏是在DoWork的方法的代碼:
List<object> s = Repository.Instance().LoadAll();
if (!bw_LoadAll.CancellationPending) {
e.Result = s;
} else {
e.Cancel = true;
}
但對於某種原因,工作人員完成的代碼不斷被調用。這裏是工作人員完成代碼:
if (!e.Cancelled) {
ddl.DataSource = e.Result;
ddl.DisplayMember = "QuickName";
ddl.ValueMember = "ID";
}
有沒有別的東西,我必須做的,從返回取消這個線程?
CancellationPending未公開在DoWorkEventArgs上,而不是在BackgroundWorker上顯示,在此示例中該參數爲參數。 –
Sherlock
2010-10-02 05:47:24