使用BackgroundWorker
BackgroundWorker bw = new BackgroundWorker();
bw.WorkerReportsProgress = true;
bw.WorkerSupportsCancellation = true;
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
bw.RunWorkerAsync(500); //开始线程
bw.CancelAsync();//取消线程
//完成时
void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
MessageBox.Show("Finish");
}
//进度改变
void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
//执行时
void bw_DoWork(object sender, DoWorkEventArgs e)
{
i = 0;
DoMyWork((BackgroundWorker)sender, e);
}
//线程函数
void DoMyWork(BackgroundWorker worker, DoWorkEventArgs e)
{
while (!worker.CancellationPending && i < (int)e.Argument)
{
System.Threading.Thread.Sleep(10);
i++;
worker.ReportProgress(i * 100 / (int)e.Argument, i.ToString());
}
}