您的位置:首页 > 编程语言 > C#

C#方法执行时用模式窗口来显示进度条 .

2012-04-28 13:54 561 查看
在做项目的时候,会遇到执行某些方法系统停顿了一下,需要客户等待,在客户等待过程中,为了系统有更好的体验,应该加个等待的标志。

这时候加个进度条以提示用户系统正在执行着。下面这个例子,是通过一个模式窗口来实现进度条的显示。

先上图(这是一个发送邮件的方法):



下面介绍一下具体方法:

首先创建一个窗体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;
}


到这里就基本完成了……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: