Cancelar tareas de fondo

Cuando mi aplicación C # se cierra, a veces queda atrapada en la rutina de limpieza. Específicamente, un trabajador de fondo no está cerrando. Esto es básicamente cómo intento cerrarlo:

privado void App_FormClosing (remitente de objetos, FormClosingEventArgs e) {backgroundWorker1.CancelAsync (); while (backgroundWorker1.IsBusy); // Se queda atascado aquí. }

¿Hay una manera diferente de que debería estar haciendo esto? Estoy usando Microsoft Visual C # 2008 Express Edition. Gracias.

INFORMACIÓN ADICIONAL:

El trabajador de fondo no parece estar saliendo. Esto es lo que tengo:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
   while (!backgroundWorker1.CancellationPending)
   {
      // Do something.
   }
}

También he modificado el código de limpieza:

private void App_FormClosing(object sender, FormClosingEventArgs e)
{
   while (backgroundWorker1.IsBusy)
   {
      backgroundWorker1.CancelAsync();
      System.Threading.Thread.Sleep(1000);
   }
}

¿Hay algo más que debería estar haciendo?

Respuestas a la pregunta(5)

Su respuesta a la pregunta