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?