异步窗体实现操作进度(ProgressWindow) (转)

本文总结了如何使用多线程和ProgressWindow窗体实现大型作业的进度显示,避免用户界面出现卡顿。通过创建子线程处理耗时任务,主线程展示进度窗体,并实时更新进度条,提升用户体验。文中提供了简单的流程图和ProgressWindowForm窗体的创建及测试代码。
摘要由CSDN通过智能技术生成

前面写了几篇关于线程、BackGroundWorker等一下文章,现在主要对这些文章进行一个总结,写一篇关键异步窗体的,来实现操作的进度。

     对于大型作业来说,循环处理是一件极其耗时的事情,如果都在Application的主线程中去执行,用户的界面感觉就如同死机一般,但是如果添加了进度窗体(ProcessWindow)来说,就不同了,程序会显示出一个新的窗体,而且给用户的效果是非常好的。

     闲话少说,首先讲一下简单的原理:一般处理这样的事情都是一种模式,就是使用多线程或者使用微软封装好的线程控件(BackgroundWorker)去处理。原理都是一样的,就是在主线程中创建一个新的线程,我们成为子线程,子线程和主线程是并行工作的,主线程显示一个模式窗体,显示给用户看,子线程则去处理我们复杂的作业,并且提示主线程显示的模式窗体进度。知道子线程处理完一切作业,则通知模式窗体关闭或者进行其他的处理,流程图如下:

 

     

 

      这是简单的流程,下面是代码的实现:

      首先创建一个项目,名叫ProgressWindowForm,然后创建一个窗体名称叫做ProgressWindowForm,首先设置这个窗体不能最大化和关闭,在窗体上添加一个Progressbar、一个Label和Cancel按钮,代码如下:

        #region  委托
        
///   <summary>
        
///  设置显示值的委托
        
///   </summary>
        
///   <param name="text"></param>
         public   delegate   void  SetTextInvoker(String text);

        
///   <summary>
        
///  进度显示的委托
        
///   </summary>
        
///   <param name="val"></param>
         public   delegate   void  IncrementInvoker( int  val);

        
///   <summary>
        
///  跳转到
        
///   </summary>
        
///   <param name="val"></param>
         public   delegate   void  StepToInvoker( int  val);

        
///   <summary>
        
///  设置ProgressBar的范围
        
///   </summary>
        
///   <param name="minimum"></param>
        
///   <param name="maximum"></param>
         public   delegate   void  RangeInvoker( int  minimum,  int  maximum);
        
#endregion

        
#region  私有变量
        
///   <summary>
        
///  tilte
        
///   </summary>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值