public Thread MyThread;
public delegate void settextDelegate();
//从子线程更新进度条数据
public void UpdateProgress()
{
if (this.label1.InvokeRequired)
{
settextDelegate st = new settextDelegate(UpdateProgress);
this.Invoke(st);
}
else
{
settext();
}
}
public void settext()
{
for (int i = 1; i < 101; i++)
{
Thread.Sleep(50);
int MyValue = i;
this.progressBar1.Value = MyValue;
this.label1.Text = "当前模拟执行进度完成百分比:" + MyValue.ToString() + "%";
}
this.button1.Text = "启动显示执行进度";
}
//启动显示执行进度
private void button1_Click(object sender, EventArgs e)
{
if(this.button1.Text=="启动显示执行进度")
{
this.button1.Text="停止显示执行进度";
MyThread=new Thread(new ThreadStart(UpdateProgress));
MyThread.Start();
}
else
{
this.button1.Text="启动显示执行进度";
MyThread.Abort();
}
}
注意2点
if (this.label1.InvokeRequired)
获取一个值,该值指示调用方法对控件进行方法调用时 是否必须调用invoke方法,因为调用方法位于创建控件所在线程以外的线程中。
settextDelegate st = new settextDelegate(UpdateProgress);
this.Invoke(st);
this.invoke 含义:
在拥有控件的基础窗口句柄的线程上,用指定的参数列表执行指定委托。