MouStudio分享 http://blog.sciencenet.cn/u/moustudio 一目半行,再目半行

博文

MouStudio技术储备之---C#进度条模态窗体

已有 10481 次阅读 2009-11-11 19:39 |个人分类:算法研究|系统分类:科研笔记| 进度条, 模态窗体, 自定义控件

 Captain Dialog 2009-11-11

介绍

以前一直就想实现这个功能,结果找了半天资料都没有能够找到符合自己要求的,总体上大概有以下几种形式的进度条窗体显示:

(1)       玩些假的进度显示,进度条一个劲的显示,进度值到头又重新来,直到主程序将其关闭;

(2)       可以实现实时的进度更新,但是由于基于的是单进程的控制,在进度条更新的过程中会出现程序假死的现象;

(3)       更有时基于一般窗体的实现,但是这样就不能实现对主程序的锁定了,但有时候也是需要这个功能的。

本文介绍了一种基于模态对话框的进度条显示窗体,可以很实时准确的显示进度值,并

且给予多线程来操作,保证程序的“活性”。此功能的实现基于参考文献:http://blog.csdn.net/jinjazz/archive/2008/05/24/2477088.aspx。并在此基础上增加了进度条窗体上的功能。

模态进度条窗体实现

实现原理

这个问题会让一些初学者感到困惑,一方面模态窗体在打开之后(Form.ShowDialog).主线程无法继续执行下面的事务;另一方面,又要在处理事务的时候来同步这个窗体里面的进度条。这两件事情都必须做,却都不能先做...

所以很多人不得不把事务处理写到模态窗体当中去,这样可以达到目的,却造成了代码结构混乱,而且子窗体无法复用,如果有多个事物,不得不为每个事务来写控制窗体。

这里我们介绍一种比较直接了当的方法,就是主线程中开启两个子线程,一个用于显示模态窗体,一个用于处理事务, 并同时更新第一个线程中的窗体信息。

    这里的知识范畴会包含线程的基础用法,线程和UI之间的交互,以及委托的基本用法。如果你还不了解这几点,可以参考一些其他资料,比如我先前写过的,在同一窗体中用子线程来控制进度条:http://blog.csdn.net/jinjazz/archive/2008/05/06/2397136.aspx

窗体设计

这里的应用稍微复杂一些,你可以先用VS2008新建一个Windows Application,命名为“进度条模态子窗体”,随后将窗体命名为Form_Main,并放置一个Button作为“进度条测试”用;如下图所示:



接着增加一个进度条的显示子窗体,命名为“Form_Progress”,并放置一个Button作为“取消”进度显示操作,再放一个进度条控件“ProgressBar1”。如下图所示:



程序设计

窗体设计完成后,接下来开始编码工作。

首先是在在主窗体中:Form_Main.cs


 

然后是进度条窗体Form_Progress.cs



执行效果

主程序运行界面如下:


进度条窗体界面如下:



功能加强版进度条模态窗体

针对原来已经实现的功能,为了能够在今后进一步的实现程序的复用,将对进度条模态子窗体的GUI方面进行优化。

进度条控件的优化

关于进度条的显示,一般的进度条控件只能显示进度的滚动条,现在需要对其增加完成进度的实时显示,简单点的方法这样其实可以通过拖放一个别人已经完成的控件来实现:

窗体设计如下:




程序执行效果如下:



控件制作复用升级

为了能够进一步的使用进度条模态窗体功能,在此将程序制作成.NET组件,总共分为两类控件:(1)像上面阐述的以线程控制,并实时显示进度值的进度条;(2)只是显示功能的圆形状态表示进度条。

控件总类程序:



2.2.1 实时进度条控件

开发效果:

 

程序代码:

2.2.2 状态进度条控件

开发效果:



程序代码:



2.2.3 控件使用举例

运行效果:

程序代码:


 

Appendix:

中子线程控制进度条的一个简单例子

进一步可参考文献地址:http://blog.csdn.net/jinjazz/archive/2008/05/06/2397136.aspx

 

Download Links:

<1>  基本进度条模态窗体原理实现程序

<2> MouStudioProgressForm实现程序

<3> 本文Word文档阅读下载

<4> 本文PDF文档阅读下载





https://wap.sciencenet.cn/blog-244606-270297.html

上一篇:C#开发多功能语言复读机 ---之--- 升级使用说明V2.0
下一篇:C#实现基于三角网的等值线追踪及填充算法
收藏 IP: .*| 热度|

0

发表评论 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-18 12:31

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部