[转] 实现winfrom进度条及进度信息提示,winfrom程序假死处理

简介:

china_xuhua 原文地址

 

1、方法一:使用线程

 功能描述:在用c#做WinFrom开发的过程中。我们经常需要用到进度条(ProgressBar)用于显示进度信息。这时候我们可能就需要用到多线 程,如果不采用多线程控制进度条,窗口很容易假死(无法适时看到进度信息)。下面我就简单结合一个我写的例子给大家做一个介绍。

第一步:设计界面,注意需要引用 using System.Threading;

实现winfrom进度条及进度信息提示,winfrom程序假死处理 - china_xuhua - 许华
控件名称分别为:
   progressBar1;label1;textBox1;button1;

第二步:定义一个代理,用于更新ProgressBar的值(Value)及在执行方法的时候,返回方法的处理信息。

        private delegate void SetPos(int ipos,string vinfo);//代理

第三步:进度条值更新函数(参数必须跟声明的代理参数一样)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
private  void  SetTextMesssage( int  ipos, string  vinfo)
        {
            if  ( this .InvokeRequired)
            {
                SetPos setpos =  new  SetPos(SetTextMesssage);
                this .Invoke(setpos,  new  object [] { ipos,vinfo });
            }
            else
            {
                this .label1.Text = ipos.ToString() +  "/1000" ;
                this .progressBar1.Value = Convert.ToInt32(ipos);
                this .textBox1.AppendText(vinfo);
            }
        }

第四步:函数实现

1
2
3
4
5
private  void  button1_Click( object  sender, EventArgs e)
         {
             Thread fThread =  new  Thread( new  ThreadStart(SleepT));
             fThread.Start();
         }

第五步:新的线程执行函数:

1
2
3
4
5
6
7
8
private  void  SleepT()
         {
             for  ( int  i = 0; i < 500; i++)
             {
                 System.Threading.Thread.Sleep(10);
                 SetTextMesssage(100*i/500,i.ToString()+ "\r\n" );
             }
         }

 

程序运行效果图:

实现winfrom进度条及进度信息提示,winfrom程序假死处理 - china_xuhua - 许华
 
=========================================================================================
 

2、第二种方法

功能描述:该种方法通过控件backgroundWorker1实现,进度条。却进度条在一个模板窗体内。
 
第一步:主窗体设计:
实现winfrom进度条及进度信息提示,winfrom程序假死处理 - china_xuhua - 许华 

 控件名称:

button1;backgroundWorker1;

对backgroundWorker1控件,属性设置:

实现winfrom进度条及进度信息提示,winfrom程序假死处理 - china_xuhua - 许华
 

 第二步:主页面后台代码:

 

分别为button控件和backgroundWorker1控件选好事件。

第三步:设置子窗体(及显示进度条的窗体):

实现winfrom进度条及进度信息提示,winfrom程序假死处理 - china_xuhua - 许华
控件名称:
progressBar1;button1
 
第四步:子窗体,后台代码:

        

 

只为button选好事件

执行效果为:

实现winfrom进度条及进度信息提示,winfrom程序假死处理 - china_xuhua - 许华
 

3、第三种方法:

     功能描述:在处理大量数据的时候,有时候方法的执行需要一定的时间,这时候往往会造成页面或程序的“假死”状态,给用户的体验度也不是很好。为了避免出现 “假死”提高用户的体验度,在这里为这类型的方法加了一个进度条和一个文本框,进度条用于显示程序处理的进度,文本框用于显示在处理过程中,给与的提示。 本方法主要使用了控件:backgroundWorker1;说明:本方法与上面的方法(方法二)基本类型,主要是设计和代码进行了一些修改。


 第一步:主窗体设计:
实现winfrom进度条及进度信息提示,winfrom程序假死处理 - china_xuhua - 许华 

控件名称:

button1;backgroundWorker1;

对backgroundWorker1控件,属性设置:


实现winfrom进度条及进度信息提示,winfrom程序假死处理 - china_xuhua - 许华

第二步:主窗体 后台代码:

       

 

第三步:设置子窗体(及显示进度条的窗体):

实现winfrom进度条及进度信息提示,winfrom程序假死处理 - china_xuhua - 许华

 控件:

progressBar1;textBox1;button1

第四步:子窗体后台代码:

      

实现的效果:

实现winfrom进度条及进度信息提示,winfrom程序假死处理 - china_xuhua - 许华
注意:如果在程序为执行完,就点击取消的话,很有可能会报错的,这时候,你就修改一个方法:backgroundWorker1_ProgressChanged
如下:
        void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            this.progressBar1.Value = e.ProgressPercentage;
            this.textBox1.Text += e.UserState.ToString(); //主窗体传过来的值,通过e.UserState.ToString()来接受
        }
       把这个方法,替换上边的那个方法,就可以了。
 

4、第四种方法:

 
     功能描述:本方法实现进度条显示,方法执行信息反馈显示。用到的技术点为 线程与代理。
     
    步骤一:添加主页面。
      
实现winfrom进度条及进度信息提示,winfrom程序假死处理 - china_xuhua - 许华
 
控件名称:
button1;
 
  步骤二:主页面后台代码
       

 

 

步骤三:创建子窗体
实现winfrom进度条及进度信息提示,winfrom程序假死处理 - china_xuhua - 许华
 控件名称:
progressBar1;textBox1
 
步骤四:子窗体,后台代码
      
 
执行效果:
实现winfrom进度条及进度信息提示,winfrom程序假死处理 - china_xuhua - 许华
 
 
 
没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。









    本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/5734724.html ,如需转载请自行联系原作者
相关文章
|
小程序 开发者 异构计算
小程序真机调试反应很慢卡顿,界面跳转之后,页面出现空白,无法点击等问题解决方案
小程序真机调试反应很慢卡顿,界面跳转之后,页面出现空白,无法点击等问题解决方案
1041 0
小程序真机调试反应很慢卡顿,界面跳转之后,页面出现空白,无法点击等问题解决方案
|
7月前
|
缓存 小程序 开发工具
解决微信开发工具的调试器加载错误,从任务栏打开工具可能导致该问题,请不要从任务栏启动工具。 和调试器控制台显示为空,刷新出不来的问题。
解决微信开发工具的调试器加载错误,从任务栏打开工具可能导致该问题,请不要从任务栏启动工具。 和调试器控制台显示为空,刷新出不来的问题。
236 0
|
开发者
uniapp中showToast之后延迟跳转页面,解决提示在真机中一闪而过
请求接口需要调用 uni.showLoading(),接口请求结束调用 uni.hideLoading(),满足需求条件后调用 uni.showToast()给用户提示信息,在开发者上正常,但是在真机上会出现提示信息一闪而过。
1084 0
|
Android开发
被后台杀死后,Android应用如何重新走闪屏逻辑
被后台杀死后,Android应用如何重新走闪屏逻辑
450 0
被后台杀死后,Android应用如何重新走闪屏逻辑
UGUI系列-文字实现进度等待、进度加载、进程等待演示动画
今天分享一下UGUI 文字实现进度等待、进度加载、进程等待演示动画,实现思路比较简单,效果也比较简单,仅供大家参考,谢谢
|
小程序
小程序 - 详解下载功能加图片下载并显示进度
小程序 - 详解下载功能加图片下载并显示进度
212 0
小程序 - 详解下载功能加图片下载并显示进度
|
前端开发 开发工具 Android开发
iOS监听物理截图自动生成截图并跳转到反馈页面进行显示(截图内容包括系统的弹框视图UIAlertView/Controller)
iOS监听物理截图自动生成截图并跳转到反馈页面进行显示(截图内容包括系统的弹框视图UIAlertView/Controller)
311 0
iOS监听物理截图自动生成截图并跳转到反馈页面进行显示(截图内容包括系统的弹框视图UIAlertView/Controller)
|
Web App开发
Chrome 插件开发-桌面通知设置实战演示,设置通知显示、存在时间
Chrome 插件开发-桌面通知设置实战演示,设置通知显示、存在时间
636 0
Chrome 插件开发-桌面通知设置实战演示,设置通知显示、存在时间
|
Android开发 UED 数据安全/隐私保护
Android项目实战(四十二):启动页优化,去除短暂白屏或黑屏
原文:Android项目实战(四十二):启动页优化,去除短暂白屏或黑屏   大家会发现一个空项目,从手机桌面打开app是秒启动。但是对于自己开发的项目,有时会发现打开app的时候,会有短暂的1秒--2秒的白屏或者黑屏,然后才进入到程序界面。
1345 0