新建一个类MyProcessBar
internal class MyProcessBar { private frmProcessBar myProcessBar = null;//进度条窗体事件 private delegate bool IncreaseHandle(int nValue);//声明一个委托 private IncreaseHandle myIncrease = null;//定义一个委托变量 public MyProcessBar() { } /// <summary> /// 打开进度条窗体 /// </summary> private void ShowProcessBar() { myProcessBar = new frmProcessBar(); // 绑定事件 myIncrease = new IncreaseHandle(myProcessBar.Increase); myProcessBar.ShowDialog(); myProcessBar = null; } /// <summary> /// 线程功能 /// </summary> private void ThreadFun(object o) { Form fm = (Form)o; //声明一个委托,ShowProcessBar为改委托所托管的代码,必须为void MethodInvoker mi = new MethodInvoker(ShowProcessBar); //异步调用ShowProcessBar(不用等ShowProcessBar方法执行完,程序可以往下执行) fm.BeginInvoke(mi); Thread.Sleep(1000);//线程停止一秒,让进度条窗体显示 bool blnIncreased = false; object objReturn = null; do { Thread.Sleep(50); //同步调用myProcessBar.Increase(),程序要等该方法执行完,才能往下执行 objReturn = fm.Invoke(this.myIncrease, new object[] { 2 }); blnIncreased = (bool)objReturn; } while (blnIncreased); } /// <summary> /// 线程启动 /// </summary> /// <param name="o"></param> public void Start(object o) { Thread thdSub = new Thread(ThreadFun); thdSub.IsBackground = true; thdSub.Start(o); } }
新建一个窗体frmProcessBar(进度条窗体)添加ProcessBar控件
public partial class frmProcessBar : Form { public frmProcessBar() { InitializeComponent(); } private void frmProcessBar_Load(object sender, EventArgs e) { } /// <summary> /// Increase process bar /// </summary> /// <param name="nValue">the value increased</param> /// <returns></returns> public bool Increase(int nValue) { if (nValue > 0) { if (prcBar.Value + nValue < prcBar.Maximum) { prcBar.Value += nValue; return true; } else { prcBar.Value = prcBar.Maximum; this.Close(); return false; } } return false; } }
主体窗
private void btnStart_Click(object sender, EventArgs e) { MyProcessBar pb = new MyProcessBar(); pb.Start(this); }