我要做一个数据库复制程序,在winform中,执行时间用进度条显示,用线程控制进度条显示状态
.........
private System.Windows.Forms.ProgressBar progressBar1; //进度条
private System.Windows.Forms.Label Lab_percent; //显示完成百分比
private Thread myThread;private void start()
{
while(isStart())
{
Thread.Sleep(100);
if(this.progressBar1.Value < this.progressBar1.Maximum)
{
Lab_percent.Text = "完成 "+ this.progressBar1.Value +"%";
this.progressBar1.Value +=1;
}
}
Lab_percent.Text = "完成100%";
this.progressBar1.Value = 100;
this.button2.Text = "完 成";
}private bool isStart()
{
//数据库是否在复制中
........
}private void SettingDatabase()
{
this.myThread.Start();
//复制数据库操作
...............
}
//执行复制数据库
private void button1_Click(object sender, System.EventArgs e)
{
this.myThread = new Thread(new ThreadStart(start));
SettingDatabase();
}
private void button2_Click(object sender, System.EventArgs e)
{
try
{
if(myThread.IsAlive)
myThread.Abort();
}
catch{}
this.Close();
}可是在执行过程中看不到进度条的显示状态,
我在下面地址中的文章中了解到progressBar1和Lab_percent是UI线程中的控件,但不知道怎么用才能
http://dev.csdn.net/article/18/18280.shtm
请高手帮我解析源码,谢谢
.........
private System.Windows.Forms.ProgressBar progressBar1; //进度条
private System.Windows.Forms.Label Lab_percent; //显示完成百分比
private Thread myThread;private void start()
{
while(isStart())
{
Thread.Sleep(100);
if(this.progressBar1.Value < this.progressBar1.Maximum)
{
Lab_percent.Text = "完成 "+ this.progressBar1.Value +"%";
this.progressBar1.Value +=1;
}
}
Lab_percent.Text = "完成100%";
this.progressBar1.Value = 100;
this.button2.Text = "完 成";
}private bool isStart()
{
//数据库是否在复制中
........
}private void SettingDatabase()
{
this.myThread.Start();
//复制数据库操作
...............
}
//执行复制数据库
private void button1_Click(object sender, System.EventArgs e)
{
this.myThread = new Thread(new ThreadStart(start));
SettingDatabase();
}
private void button2_Click(object sender, System.EventArgs e)
{
try
{
if(myThread.IsAlive)
myThread.Abort();
}
catch{}
this.Close();
}可是在执行过程中看不到进度条的显示状态,
我在下面地址中的文章中了解到progressBar1和Lab_percent是UI线程中的控件,但不知道怎么用才能
http://dev.csdn.net/article/18/18280.shtm
请高手帮我解析源码,谢谢
private void button1_Click(object sender, System.EventArgs e)
{
this.myThread = new Thread(new ThreadStart(start));
this.myThread.Start();
SettingDatabase();
}
{
System.Threading.Thread tNew = new System.Threading.Thread (new System.Threading.ThreadStart(this.Test));
tNew.Start();
}delegate void SetProgressDelegate();private void SetProgress()
{
if(this.progressBar1.Value < this.progressBar1.Maximum)
{
Lab_percent.Text = "完成 "+ this.progressBar1.Value +"%";
this.progressBar1.Value +=1;
}
}private void Test()
{
this.Invoke(new SetProgressDelegate(SetProgress));
}