У меня есть два списка, один мастер, другой ребенок. Когда индекс изменяется на ведущем устройстве, дочерний список соответствующим образом заполняется записями, относящимися к основному устройству. Моя проблема возникает, когда одному мастеру требуется много времени, чтобы получить все записи, и до того, как он завершил получение записей, пользователь нажимает другой мастер, для заполнения которого требуется меньше времени. В конечном итоге мастер, который занимал больше времени, заполняет дочерний список, хотя пользователь больше не находится на этом мастере.
Я использовал потоки BackgroundWorker для заполнения.
bw_LoadAll.DoWork += new DoWorkEventHandler(bg_LoadAllWork);
bw_LoadAll.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bg_LoadAllWorkCompleted);
bw_LoadAll.WorkerSupportsCancellation = true;
Я подписался на событие SelectedIndexChanged для мастера и установил отмененное значение равным true:
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";
}
Есть ли что-то еще, что я должен сделать, чтобы отменить эту тему от возвращения?