Por parada, ¿realmente quieres decir detener o quieres decir pausa? Si quieres parar, entonces esto es pan comido. Cree un controlador de evento de clic de botón para el botón que desea que sea responsable de iniciar el trabajador de fondo y un controlador de evento de clic de botón para el responsable de detenerlo. En su botón de inicio, realice una llamada al método de trabajador en segundo plano que activa el evento do_work. Algo como esto:
private void startButton_Click(System.Object sender,
System.EventArgs e)
{
// Start the asynchronous operation.
backgroundWorker1.RunWorkerAsync();
}
En el botón de parada, hacer una llamada al método que establece de CancellationPending
a verdadero trabajador de fondo, como esto:
private void cancelAsyncButton_Click(System.Object sender,
System.EventArgs e)
{
// Cancel the asynchronous operation.
this.backgroundWorker1.CancelAsync();
}
Ahora no se olvide de comprobar la CancelationPending
bandera dentro de su doWork del trabajador de fondo. Algo como esto:
private void KillZombies(BackgroundWorker worker, DoWorkEventArgs e)
{
while (true)
{
if (worker.CancellationPending)
{
e.Cancel = true;
}
}
}
Y su método de DoWork:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
KillZombies(worker, e);
}
espero que esto puede guiarlo en la dirección correcta. Algunas lecturas adicionales:
http://msdn.microsoft.com/en-us/library/b2zk6580(v=VS.90).aspx
http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx
http://msdn.microsoft.com/en-us/library/waw3xexc.aspx
Hmm, por la respuesta que recibieron, ten cuidado - usted se está preocupando todo acerca de un efecto que sólo hará que no dejar de una iteración o dos más tarde, ¡pero olvidando que vas a estar OCUPANDO todo un procesador simplemente girando! Al menos pon un sueño allí. Parecerá que está funcionando pero en gran detrimento.Algunas de las otras respuestas resuelven todos esos problemas de la forma en que 'se supone' resolverlos. – FastAl