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?