bw.RunWorkerAsync();
}
private void button2_Click(object sender, EventArgs e)
{
bw.CancelAsync();
}
void bw_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i < 1000; i++)
{
if (bw.CancellationPending)
{
e.Cancel = true;
return;
}
this.Invoke((MethodInvoker)delegate
{
this.richTextBox1.Text += i + Environment.NewLine;
});
}
}
void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Cancelled)
{
this.richTextBox1.Text += "线程已经停止";
}
else
{
this.richTextBox1.Text += "线程已经完成";
}
}
到现在为止你可以自己去用BackgroundWorker创建一个线程了,你已经了解它了,当然BackgroundWorker还有一个ReportProgress滚动条事件,可以显示进度,我暂且认为它是多余的,因为大部分进度都可以通过bw_DoWork来控制实现。下面我们继续完善BackgroundWorker,加入暂停和继续功能。
再拖动一个button控件到界面,BackgroundWorker的暂停和继续我们使用ManualResetEvent。
BackgroundWorker bw = null;
//创建ManualResetEvent
ManualResetEvent mr = new ManualResetEvent(true);
private void button1_Click(object sender, EventArgs e)
{
bw = new BackgroundWorker();
bw.WorkerSupportsCancellation = true;
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
bw.RunWorkerAsync();
}
private void button2_Click(object sender, EventArgs e)
{
bw.CancelAsync();
}
private void button3_Click(object sender, EventArgs e)
{
Button b = (Button)sender;
if (b.Text == "暂停")
{
mr.Reset();








