Звучит так, будто вы не проверяете BackgroundWorker.CancellationPending при получении данных элемента.
Вам нужно будет сделать что-то вроде этого:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
// Do not access the form's BackgroundWorker reference directly.
// Instead, use the reference provided by the sender parameter.
BackgroundWorker bw = sender as BackgroundWorker;
// Extract the argument.
int arg = (int)e.Argument;
// Start the time-consuming operation.
e.Result = TimeConsumingOperation(bw, arg);
// If the operation was canceled by the user,
// set the DoWorkEventArgs.Cancel property to true.
if (bw.CancellationPending)
{
e.Cancel = true;
}
}
См. Также Как: выполнить операцию в фоновом режиме .
Возможно, вы хотите поместить несколько проверок для CancellationPending
в свой асинхронный код, по одной после каждого шага, который занимает значительное количествовремени.