Я пытаюсь использовать фона рабочего в приложении WPF. Задача о тяжелой работе использует WebClient для загрузки некоторого HTML-кода и анализа информации из него. В идеале я хочу выполнить эту загрузку и разбор, не блокируя пользовательский интерфейс и помещая результаты в пользовательский интерфейс, как только он будет работать.Этот BackgroundWorker в настоящее время занят и не может одновременно выполнять несколько задач
И это прекрасно работает, однако, если я быстро отправить «загрузить и разобрать» команда, я получаю ошибку:
This BackgroundWorker is currently busy and cannot run multiple tasks concurrently
Так что я сделал некоторые Googling, и кажется, что я могу позволить .WorkerSupportsCancellation
недвижимости фонового работника и только .CancelAsync()
. Однако это не работает должным образом (отменяет текущую загрузку и анализ).
Я все еще получаю вышеуказанную ошибку.
Вот мой код:
//In window constructor.
_backgroundWorker.WorkerSupportsCancellation = true;
_backgroundWorker.DoWork += new DoWorkEventHandler(_backgroundWorker_DoWork);
_backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(_backgroundWorker_RunWorkerCompleted);
//Declared at class level variable.
BackgroundWorker _backgroundWorker = new BackgroundWorker();
//This is the method I call from my UI.
private void LoadHtmlAndParse(string foobar)
{
//Cancel whatever it is you're doing!
_backgroundWorker.CancelAsync();
//And start doing this immediately!
_backgroundWorker.RunWorkerAsync(foobar);
}
POCOClassFoo foo = new POCOClassFoo();
void _backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//This automagically sets the UI to the data.
Foo.DataContext = foo;
}
void _backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
//DOING THE HEAVY LIFTING HERE!
foo = parseanddownloadresult()!
}
Это будет вызывать длинный каскад модальных MessageBox, от которых пользователь не может убежать. – djdanlib
Kumar, ваш код был полезен для меня, поэтому я буду поддерживать – dovla091