日期:2014-05-20  浏览次数:21096 次

winform中显示进度条
在winform程序中如何显示某个方法执行进度的进度条(也可以不显示进度的百分比,能显示当然最好)?

因为执行某些方法时带有比较复杂的业务逻辑,对数据库的操作也比较慢,所有想在执行该方法时给用户界面显示一个进度,当该方法执行完毕后再关闭该进度条.

------解决方案--------------------
ProgressBar
------解决方案--------------------
2005 BackgroundWorker
2003 ProgressBar
------解决方案--------------------
执行的方法最好是循环的~~~~

那么在类里面定义一个属性,用来记录方法的进度,
比如属性T,在方法里面调用(递增)T..
属性T被定义为每次为T赋值的话就调用一次自定义的方法OnTChanged()~~
然后再暴露一个事件委托TChanged给外部,例如进度条使用~~~
------解决方案--------------------
int _t=0;
//定义一个委托数据类型
//定义一个委托类型
//声明一个该委托类型事件TChanged;
public int T{
get{return _t;}
set{
_t=value;
OnTChanged();
}
}
void OnTChanged(){
//创建一个时间产生的数据类型e,将T值赋给e
if(TChanged!=null){
TChaned(this,e);
}
};

//---------------
在类的外部根据事件去搞进度条~~~`
------解决方案--------------------
补充一点:注意要和你的数据处理分开线程处理。
------解决方案--------------------
BackgroundWorker实例
http://idior.cnblogs.com/archive/2005/08/18/217796.html
------解决方案--------------------
google里搜一下,要学会自己找帮助。。。。
------解决方案--------------------
delegate void myDelegate(int i, bool flag);
public void ShowMessage(int i, bool flag){
if(flag == true)
{
this.textBox1.Text = i.ToString();
this.progressBar1.Value = i;
}
else{
this.textBox2.Text = i.ToString();
}
}

public void MyEvent(){
mutex.WaitOne();
for(int i=0; i <=100; i++)
{
Thread.Sleep(1000);
this.BeginInvoke(mydelegate, new Object[] {i, true});
}
mutex.ReleaseMutex();
}

private void button1_Click(object sender, System.EventArgs e)
{
Thread myThread = null;
mydelegate = new myDelegate(ShowMessage);
myThread = new Thread(new ThreadStart(MyEvent));
myThread.IsBackground = true;
myThread.Start();
}