博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#方法执行时用模式窗口来显示进度条 .
阅读量:6104 次
发布时间:2019-06-21

本文共 2529 字,大约阅读时间需要 8 分钟。

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

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

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

下面介绍一下具体方法:

首先创建一个窗体ProcessBar,在里面加一个方法。用于进度条递增、显示

public partial class ProcessBar : Form    {        public ProcessBar()        {            InitializeComponent();        }        ///         /// 进度条方法        ///         /// 进度条递增的值        /// 
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; } /// /// 这个方法是用于关闭窗口(有时进度条会卡住) /// /// /// 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;        }

 到这里就基本完成了……

 

转载于:https://www.cnblogs.com/IT-SmallBird/archive/2012/04/28/2475014.html

你可能感兴趣的文章
mysql的innodb中事务日志(redo log)ib_logfile
查看>>
部署SSL证书后,网页内容造成页面错误提示的处理办法
查看>>
MS SQLSERVER通用存储过程分页
查看>>
60.使用Azure AI 自定义视觉服务实现物品识别Demo
查看>>
Oracle 冷备份
查看>>
jq漂亮实用的select,select选中后,显示对应内容
查看>>
C 函数sscanf()的用法
查看>>
python模块之hashlib: md5和sha算法
查看>>
linux系统安装的引导镜像制作流程分享
查看>>
解决ros建***能登录不能访问内网远程桌面的问题
查看>>
pfsense锁住自己
查看>>
vsftpd 相关总结
查看>>
bash complete -C command
查看>>
解决zabbix 3.0中1151端口不能运行问题
查看>>
售前工程师的成长---一个老员工的经验之谈
查看>>
Get到的优秀博客网址
查看>>
dubbo
查看>>
【Git入门之四】操作项目
查看>>
老男孩教育每日一题-第107天-简述你对***的理解,常见的有哪几种?
查看>>
Python学习--time
查看>>