public partial class frmProcessBar : Form { public frmProcessBar() { InitializeComponent(); } public bool Increase(int nValue) { if (nValue > 0) { if (progressBar1.Value + nValue < progressBar1.Maximum) { progressBar1.Value += nValue; return true; } else { progressBar1.Value = progressBar1.Maximum; this.Close(); return false; } } return false; } }
private frmProcessBar myProcessBar = null; private delegate bool IncreaseHandle(int nValue); private IncreaseHandle myIncrease = null; private void btnRun_Click(object sender, EventArgs e) { Thread thdSub = new Thread(new ThreadStart(ThreadFun)); thdSub.Start(); } private void ShowProcessBar() { myProcessBar = new frmProcessBar(); // Init increase event myIncrease = new IncreaseHandle(myProcessBar.Increase); myProcessBar.ShowDialog(); } private void ThreadFun() { MethodInvoker mi = new MethodInvoker(ShowProcessBar); this.BeginInvoke(mi); bool blnIncreased = false; object objReturn = null; do { Thread.Sleep(50); objReturn = this.Invoke(this.myIncrease,new object[] { 1 }); blnIncreased = (bool)objReturn; } while (blnIncreased); }
原文:http://www.cnblogs.com/rinack/p/3785709.html