[转] 实现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 ,如需转载请自行联系原作者



相关文章
|
小程序 开发者 异构计算
小程序真机调试反应很慢卡顿,界面跳转之后,页面出现空白,无法点击等问题解决方案
小程序真机调试反应很慢卡顿,界面跳转之后,页面出现空白,无法点击等问题解决方案
1273 0
小程序真机调试反应很慢卡顿,界面跳转之后,页面出现空白,无法点击等问题解决方案
|
7月前
|
安全 BI UED
分享一个在 WinForm 桌面程序中使用进度条展示报表处理进度的例子,提升用户体验
分享一个在 WinForm 桌面程序中使用进度条展示报表处理进度的例子,提升用户体验
|
存储 小程序 前端开发
【易售小程序项目】小程序私聊页面完善(带尾巴聊天气泡组件封装、滑至顶端获取历史聊天数据逻辑优化)【后端基于若依管理系统开发】
【易售小程序项目】小程序私聊页面完善(带尾巴聊天气泡组件封装、滑至顶端获取历史聊天数据逻辑优化)【后端基于若依管理系统开发】
99 0
|
iOS开发
iOS开发 - 写一个刷新的控件(未封装,适合新手学习,查看原理)
iOS开发 - 写一个刷新的控件(未封装,适合新手学习,查看原理)
166 0
iOS开发 - 写一个刷新的控件(未封装,适合新手学习,查看原理)
|
Android开发
被后台杀死后,Android应用如何重新走闪屏逻辑
被后台杀死后,Android应用如何重新走闪屏逻辑
671 0
被后台杀死后,Android应用如何重新走闪屏逻辑
|
缓存 数据处理 异构计算
屏幕刷新机制简单问(没有代码,请放心享用)
周一好呀,今天给大家带来一点轻松简单的内容,没有代码,请享用~
327 0
屏幕刷新机制简单问(没有代码,请放心享用)