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



相关文章
|
消息中间件 存储
RabbitMQ的高可用机制
RabbitMQ 提供了多种高可用机制来确保消息队列的可靠性和稳定性。
1076 0
|
Linux
Linux制作deb格式安装包教程
Linux制作deb格式安装包教程
1151 0
|
C# 图形学 Windows
Winform控件优化之背景透明那些事2:窗体背景透明、镂空穿透、SetStyle、GDI透明效果等
两行代码就能实现Form窗体的(背景)透明效果,它不是Opacity属性的整个窗体透明,`TransparencyKey`实现窗体的透明、窗体中间部分镂空效果...
4105 0
Winform控件优化之背景透明那些事2:窗体背景透明、镂空穿透、SetStyle、GDI透明效果等
|
11月前
|
存储 安全 API
如何对 API 进行安全加密?
对API进行安全加密是保障数据安全和系统稳定的重要措施
938 60
|
Ubuntu Linux
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
2533 4
|
人工智能 IDE Devops
通义灵码技术解析,打造 AI 原生开发新范式
本文第一部分先介绍 AIGC 对软件研发的根本性影响,从宏观上介绍当下的趋势;第二部分将介绍 Copilot 模式,第三部分是未来软件研发 Agent 产品的进展。
73708 7
|
12月前
|
API C# Windows
【C#】在winform中如何实现嵌入第三方软件窗体
【C#】在winform中如何实现嵌入第三方软件窗体
617 0
|
XML JSON Java
Android App网络通信中通过okhttp调用HTTP接口讲解及实战(包括GET、表单格式POST、JSON格式POST 附源码)
Android App网络通信中通过okhttp调用HTTP接口讲解及实战(包括GET、表单格式POST、JSON格式POST 附源码)
1832 0
|
存储 Java Linux
Android系统获取event事件回调等几种实现和原理分析
Android系统获取event事件回调等几种实现和原理分析
1079 0
|
Apache Windows
小白下载和安装Apache的教程(保姆级)
小白下载和安装Apache的教程(保姆级)
1387 0