我有一个窗体上有2个组合框。我想根据combobox1.Text
和combobox2.Text
填写combobox2.DataSource
(我假设用户已完成combobox1
的输入,并且正在输入combobox2
的中间)。所以,我对于combobox2
像这样的事件处理程序:如何正确停止BackgroundWorker
private void combobox2_TextChanged(object sender, EventArgs e)
{
if (cmbDataSourceExtractor.IsBusy)
cmbDataSourceExtractor.CancelAsync();
var filledComboboxValues = new FilledComboboxValues{ V1 = combobox1.Text,
V2 = combobox2.Text};
cmbDataSourceExtractor.RunWorkerAsync(filledComboboxValues);
}
至于建筑的DataSource是耗时的过程(它会创建一个请求数据库,并执行它),我决定,这是更好地在另一个进程中执行它使用BackgroundWorker。因此,当cmbDataSourceExtractor尚未完成其工作并且用户再次键入另一个符号时会出现这种情况。在这种情况下,我在此行上发现异常
cmbDataSourceExtractor.RunWorkerAsync(filledComboboxValues);
有关该BackgroundWorker正忙,无法在同一时间执行多个操作。
如何摆脱这个异常?
在此先感谢!
我想补充一点,CancelAsync是无阻塞的操作,即使您处理您的DoWork正确CancellationPendning(),你不能继续下一行的DoWork(执行CancelAsync)在几秒钟内可以终止。 – dzendras 2011-01-19 07:36:19