¿Cómo detener BackgroundWorker en el evento de cierre de formulario?

Tengo un formulario que genera un BackgroundWorker, que debería actualizar el propio cuadro de texto del formulario (en el hilo principal), por lo tantoInvoke((Action) (...)); llamada.
Si enHandleClosingEvent solamente lo hagobgWorker.CancelAsync() entonces me pongoObjectDisposedException enInvoke(...) llamar, comprensiblemente Pero si me siento enHandleClosingEvent y esperar a que bgWorker se haga, entonces .Invoke (...) nunca regresa, también es comprensible.

¿Alguna idea de cómo cierro esta aplicación sin obtener la excepción o el punto muerto?

Los siguientes son 3 métodos relevantes de la clase Form1 simple:

    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
    }

Respuestas a la pregunta(12)

Su respuesta a la pregunta