任务后台工作,并显示进度:
private void btnStart_Click(object sender, EventArgs e)
{
btnStart.Enabled = false;
btnStop.Enabled = true;
backgroundWorker1.RunWorkerAsync();
}
private void btnStop_Click(object sender, EventArgs e)
{
backgroundWorker1.CancelAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
FileStream FS = File.OpenWrite("test.txt");
StreamWriter sw = new StreamWriter(FS);
for (int i = 0; i < 100000000; i++)
{
if (this.backgroundWorker1.CancellationPending)
{
e.Cancel = true;
break;
}
sw.Write("Hello");
if (i % 1000000 == 0)
this.backgroundWorker1.ReportProgress(i / 1000000);
}
sw.Close();
FS.Close();
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
this.progressBar1.Value = e.ProgressPercentage;
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Cancelled) MessageBox.Show("文件写入已取消!");
else MessageBox.Show("文件写入完成!");
btnStart.Enabled = true;
btnStop.Enabled = false;
}