Мой ответ немного другой, потому что я пробовал эти методы, но они не работали. Мой код использует дополнительный класс, который проверяет логический флаг в общедоступном статическом классе, когда значения базы данных читаются или где я предпочитаю это непосредственно перед тем, как объект добавляется в объект List или что-то в этом роде. Смотрите изменения в коде ниже. Я добавил свойство ThreadWatcher.StopThread. для этого объяснения я не собираюсь восстанавливать текущий поток, потому что это не ваша проблема, но это так же просто, как установить для свойства значение false перед доступом к следующему потоку ...
private void combobox2_TextChanged(object sender, EventArgs e)
{
//Stop the thread here with this
ThreadWatcher.StopThread = true;//the rest of this thread will run normally after the database function has stopped.
if (cmbDataSourceExtractor.IsBusy)
cmbDataSourceExtractor.CancelAsync();
while(cmbDataSourceExtractor.IsBusy)
Application.DoEvents();
var filledComboboxValues = new FilledComboboxValues{ V1 = combobox1.Text,
V2 = combobox2.Text};
cmbDataSourceExtractor.RunWorkerAsync(filledComboboxValues );
}
все хорошо
private void cmbDataSourceExtractor_DoWork(object sender, DoWorkEventArgs e)
{
if (this.cmbDataSourceExtractor.CancellationPending)
{
e.Cancel = true;
return;
}
// do stuff...
}
Теперь добавьте следующий класс
public static class ThreadWatcher
{
public static bool StopThread { get; set; }
}
и в вашем классе, где вы читаете базу данных
List<SomeObject>list = new List<SomeObject>();
...
if (!reader.IsDbNull(0))
something = reader.getString(0);
someobject = new someobject(something);
if (ThreadWatcher.StopThread == true)
break;
list.Add(something);
...
не забудьте использовать блок finally для правильного закрытия соединения с базой данных и т. Д. Надеюсь, это поможет! Пожалуйста, отметьте меня, если вы найдете это полезным.