C#方法执行时用模式窗口来显示进度条 .
在做项目的时候,会遇到执行某些方法系统停顿了一下,需要客户等待,在客户等待过程中,为了系统有更好的体验,应该加个等待的标志。
这时候加个进度条以提示用户系统正在执行着。下面这个例子,是通过一个模式窗口来实现进度条的显示。
先上图(这是一个发送邮件的方法):
下面介绍一下具体方法:
首先创建一个窗体ProcessBar,在里面加一个方法。用于进度条递增、显示
public partial class ProcessBar : Form { public ProcessBar() { InitializeComponent(); } /// <summary> /// 进度条方法 /// </summary> /// <param name="nValue">进度条递增的值</param> /// <returns></returns> public bool Increase(int nValue) { if (nValue > 0) { if (this.progressBar1.Value + nValue < progressBar1.Maximum) { progressBar1.Value += nValue; return true; } else { progressBar1.Value = progressBar1.Maximum;//默认值为100 this.Close(); return false; } } return false; } /// <summary> /// 这个方法是用于关闭窗口(有时进度条会卡住) /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { this.Close(); } }
第二步:在主窗口声明显示进度条窗体对象和一个委托:
//委托 private delegate bool IncreaseHandle(int nValue); //进度条窗口 private ProcessBar myProcessBar = null; //声明委托对象 private IncreaseHandle myIncrease = null; //邮件批量发送 private void Button_SendAll_Click(object sender, EventArgs e) { //使用线程起动 Thread thdSub = new Thread(new ThreadStart(ThreadFun)); thdSub.Start(); } private void ThreadFun() { //线程中的一个委托 MethodInvoker mi = new MethodInvoker(ShowProcessBar); this.BeginInvoke(mi);//异步挨靠委托 //延时1秒显示窗口 Thread.Sleep(1000); bool blnIncreased = false; object objReturn = null; //循环执行委托,直到返回值 do { Thread.Sleep(50); objReturn = this.Invoke(this.myIncrease, new object[] { 2 }); blnIncreased = (bool)objReturn; } while (blnIncreased); } private void ShowProcessBar() { myProcessBar = new ProcessBar(); // 初始化进度条委托 myIncrease = new IncreaseHandle(myProcessBar.Increase); myProcessBar.StartPosition = FormStartPosition.CenterScreen; myProcessBar.ShowDialog(); myProcessBar = null; }
到这里就基本完成了……