Под остановкой вы действительно подразумеваете остановку или паузу?
Если вы имеете в виду стоп, то это кусок пирога. Создайте обработчик события нажатия кнопки для кнопки, за которую вы хотите отвечать за запуск фонового работника, и обработчик события нажатия кнопки для того, кто отвечает за его остановку. На вашей кнопке запуска вызовите метод фонового рабочего, который запускает событие do_work. Примерно так:
private void startButton_Click(System.Object sender,
System.EventArgs e)
{
// Start the asynchronous operation.
backgroundWorker1.RunWorkerAsync();
}
На вашей кнопке остановки вызовите метод, который устанавливает CancellationPending
фонового работника в значение true, например:
private void cancelAsyncButton_Click(System.Object sender,
System.EventArgs e)
{
// Cancel the asynchronous operation.
this.backgroundWorker1.CancelAsync();
}
Теперь не забудьте проверить флаг CancelationPending
внутри DoWork вашего фонового работника. Примерно так:
private void KillZombies(BackgroundWorker worker, DoWorkEventArgs e)
{
while (true)
{
if (worker.CancellationPending)
{
e.Cancel = true;
}
}
}
И ваш метод doWork:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
KillZombies(worker, e);
}
Я надеюсь, что это может направить вас в правильном направлении. Некоторые дальнейшие чтения:
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