Cancelando tarefas em segundo plano

Quando meu aplicativo C # é fechado, ele às vezes fica preso na rotina de limpeza. Especificamente, um trabalhador em segundo plano não está fechando. Isto é basicamente como eu estou tentando fechá-lo:

private void App_FormClosing (remetente do objeto, FormClosingEventArgs e) {backgroundWorker1.CancelAsync (); while (backgroundWorker1.IsBusy); // Fica preso aqui. }

Existe uma maneira diferente de eu fazer isso? Estou usando o Microsoft Visual C # 2008 Express Edition. Obrigado.

INFORMAÇÃO ADICIONAL:

O trabalhador em segundo plano não parece estar saindo. Isto é o que eu tenho:

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

Também modifiquei o código de limpeza:

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

Há algo mais que eu deveria estar fazendo?