在做項目的時候,會遇到執行某些方法系統停頓了一下,需要客戶等待,在客戶等待過程中,為了系統有更好的體驗,應該加個等待的標志。
這時候加個進度條以提示用戶系統正在執行着。下面這個例子,是通過一個模式窗口來實現進度條的顯示。
先上圖(這是一個發送郵件的方法):

下面介紹一下具體方法:
首先創建一個窗體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;
}
到這里就基本完成了……
