Par arrêt, voulez-vous vraiment dire arrêter ou voulez-vous dire pause? Si vous voulez dire arrêter, alors c'est un morceau de gâteau. Créez un gestionnaire d'événement de clic de bouton pour le bouton que vous voulez être responsable du démarrage du travailleur d'arrière-plan et un gestionnaire d'événements de clic de bouton pour celui responsable de l'arrêter. Sur votre bouton de démarrage, appelez la méthode de travail en arrière-plan qui déclenche l'événement do_work. Quelque chose comme ceci:
private void startButton_Click(System.Object sender,
System.EventArgs e)
{
// Start the asynchronous operation.
backgroundWorker1.RunWorkerAsync();
}
Sur votre bouton d'arrêt, faire un appel à la méthode qui définit le travailleur de CancellationPending
de fond vrai, comme ceci: Maintenant
private void cancelAsyncButton_Click(System.Object sender,
System.EventArgs e)
{
// Cancel the asynchronous operation.
this.backgroundWorker1.CancelAsync();
}
ne pas oublier de vérifier la CancelationPending
drapeau à l'intérieur de votre travail. Quelque chose comme ceci:
private void KillZombies(BackgroundWorker worker, DoWorkEventArgs e)
{
while (true)
{
if (worker.CancellationPending)
{
e.Cancel = true;
}
}
}
Et votre méthode DoWork:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
KillZombies(worker, e);
}
J'espère que cela peut vous orienter dans la bonne direction. Quelques autres lectures:
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, la réponse que vous avez accepté, méfiez-vous - vous inquiétez tout au sujet d'un effet qui seule cause il pas d'arrêter une itération ou deux plus tard, mais en oubliant que vous allez être occupé tout un processeur tourne juste! Au moins mettre un sommeil là-dedans. On dirait que ça marche mais au détriment de tout.Certaines des autres réponses résolvent tous ces problèmes de la façon dont vous êtes supposé les résoudre. – FastAl