我有两个列表框,一个是主人,另一个是孩子。当主索引上的索引发生变化时,子列表框将被正确填充与主索引有关的记录。当一位主人花费很长时间获取所有记录,并且在完成获取记录之前,用户点击另一位需要较少时间填写的主人,我的问题即将到来。发生的是,最终,即使用户不在该主人身上,花费较长时间的主人也会填充子列表框。取消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