前面学习了委托,事件和多线程相关的知识。今天我们就通过在项目中常见的实例来加深对多线程的应用。
一、使用线程在窗体中显示进度条
在Winform应用程序中,经常用进度条显示进度信息。这时候就可能用到多线程。如果不采用多线程控制进度条的话,窗口界面很容易假死(无法看到进度信息,看起来像界面卡住了)。
在这个实例中,我们建立一个窗体,窗体中包括一个后台组件,一个进度条控件。当在主窗体中按“开始”按钮时,进度条开始显示进度。
该实例中用Backgroundworker组件,表示后台工作。通过后台工作组件实现进度条。
主窗体:
进度条窗体:
进度条窗体的代码如下:
public partial class ProcessForm : Form
{
//后台操作
private BackgroundWorker backgroundworker1;
public ProcessForm(BackgroundWorker backgroundworker1)
{
InitializeComponent();
this.backgroundworker1 = backgroundworker1;
this.backgroundworker1.ProgressChanged += new ProgressChangedEventHandler(backgroundworker1_ProcessChanged);
this.backgroundworker1.RunWorkerCompleted +=new RunWorkerCompletedEventHandler( Backgroundworker1_RunWorkerCompleted);
}
/// <summary>
/// 当辅助线程完成时引发
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Backgroundworker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
this.Close();
}
private void backgroundworker1_ProcessChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;//异步任务的进度百分比
}
private void button1_Click(object sender, EventArgs e)
{
backgroundworker1.WorkerSupportsCancellation = true;
backgroundworker1.CancelAsync();
button1.Enabled = false;
Close();
}
}
主窗体代码如下:
public partial class Form1 : Form
{
public