J'ai un formulaire qui génère un BackgroundWorker, qui devrait formulaire de mise à jour propre zone de texte (sur le thread principal), donc d' Invoke((Action) (...));
appel.
Si, en HandleClosingEvent
je viens de faire bgWorker.CancelAsync()
puis-je obtenir de l' ObjectDisposedException
sur Invoke(...)
appel, ce qui est compréhensible. Mais si je suis assis en HandleClosingEvent
et d'attendre bgWorker à faire, que .Invoke(...) ne retourne jamais, aussi naturellement.
Des idées comment puis-je fermer cette application sans exception, ou de l'impasse?
Suivant 3 méthodes pertinentes de la simple classe 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
}