Как остановить BackgroundWorker на закрытии формы?
У меня есть форма, которая порождает BackgroundWorker, который должен обновить собственное текстовое поле формы (в основном потоке), следовательно,Invoke((Action) (...));
вызов.
Если вHandleClosingEvent
я простоbgWorker.CancelAsync()
тогда я получаюObjectDisposedException
наInvoke(...)
позвони, понятно. Но если я сижу вHandleClosingEvent
и дождитесь завершения bgWorker, после чего .Invoke (...) никогда не вернется, также понятно.
Любые идеи, как закрыть это приложение без исключения или тупик?
Ниже приведены 3 соответствующих метода простого класса Form1:
public Form1() {
InitializeComponent();
Closing += HandleClosingEvent;
this.bgWorker.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) {
while (!this.bgWorker.CancellationPending) {
Invoke((Action) (() => { this.textBox1.Text = Environment.TickCount.ToString(); }));
}
}
private void HandleClosingEvent(object sender, CancelEventArgs e) {
this.bgWorker.CancelAsync();
/////// while (this.bgWorker.CancellationPending) {} // deadlock
}