如何弹出一个模式窗口来显示进度条 .
最近看了好多人问这方面的问题,以前我也写过一篇blog,里面说了如何在子线程中控制进度条。但目前大多数环境,需要弹出模式窗口,来显示进度条,那么只需要在原先的基础上稍作修改即可。
首先是进度条窗体,需要在上面添加进度条,然后去掉ControlBox。除此外,还要增加一个方法,用来控制进度条的增加幅度,具体如下:
/// <summary>
/// Increase process bar
/// </summary>
/// <param name="nValue">the value increased</param>
/// <returns></returns>
public bool Increase( int nValue )
{
if( nValue > 0 )
{
if( prcBar.Value + nValue < prcBar.Maximum )
{
prcBar.Value += nValue;
return true;
}
else
{
prcBar.Value = prcBar.Maximum;
this.Close();
return false;
}
}
return false;
}
接着就是主窗体了,如何进行操作了,首先需要定义两个私有成员,一个委托。其中一个私有成员是保存当前进度条窗体对象,另一个是保存委托方法(即增加进度条尺度),具体如下:
private frmProcessBar myProcessBar = null;
private delegate bool IncreaseHandle( int nValue );
private IncreaseHandle myIncrease = null;
接着要在主窗体中提供函数来打开进度条窗体,如下:
/// <summary>
/// Open process bar window
/// </summary>
private void ShowProcessBar()
{
myProcessBar = new frmProcessBar();
// Init increase event
myIncrease = new IncreaseHandle( myProcessBar.Increase );
myProcessBar.ShowDialog();
myProcessBar = null;
}
那么现在就可以开始创建线程来运行,具体如下:
/// <summary>
/// Sub thread function
/// </summary>
private void ThreadFun()
{
MethodInvoker mi = new MethodInvoker( ShowProcessBar );
this.BeginInvoke( mi );
Thread.Sleep( 1000 );//Sleep a while to show window
bool blnIncreased = false;
object objReturn = null;
do
{
Thread.Sleep( 50 );
objReturn = this.Invoke( this.myIncrease,
new object[]{ 2 } );
blnIncreased = (bool)objReturn ;
}
while( blnIncreased );
}
注意以上,在打开进度条窗体和增加进度条进度的时候,一个用的是BeginInvoke,一个是Invoke,这里的区别是BeginInvoke不需要等待方法运行完毕,而Invoke是要等待方法运行完毕。还有一点,此处用返回值来判断进度条是否到头了,如果需要有其他的控制,可以类似前面的方法来进行扩展。
启动线程,可以如下:
Thread thdSub = new Thread( new ThreadStart( ThreadFun ) );
thdSub.Start();
这样,一个用模式打开进度条窗体就做完了。
转载于:https://www.cnblogs.com/xchangli/p/3205635.html
如何弹出一个模式窗口来显示进度条 .相关推荐
- html点击按钮弹出悬浮窗_9种实现点击一个链接弹出一个小窗口的代码
9 种实现点击一个链接弹出一个小窗口的代码 因为着是一段 javascripts 代码, 所以它们应该放在之间. 是对一些版本低的浏览器起作用,在这些老浏览器中不会将 标签中的代码作为文本显示出来.要 ...
- html弹出非模式窗口,JavaScript模态窗口和非模态窗口(转)
JavaScript中弹出的窗口有模态窗口和非模态窗口.模态窗口就是打开一个子窗口,如果这个子窗口不关闭,就不能操作它的父窗口,原来程序暂停执行,直到这个模态窗口关闭 后才回到原来程序继续.非模态的就 ...
- html点击按钮弹出悬浮窗_点击文字或按钮弹出一个DIV窗口(DIV悬浮窗口)
以下是弹出窗口代码: 点击文字弹出一个DIV层窗口代码 .black_overlay{ display: none; position: absolute; top: 0%; left: 0%; wi ...
- html弹窗超链接,点出超链接弹出一个小窗口
1.在js里先定义一个方法,用来打开窗口 具体如下: ?参数解释: window.open?弹出新窗口的命令: 'page.html'?弹出窗口的文件名: 'newwindow'?弹出窗口的名字(不是 ...
- 点出超链接弹出一个小窗口
1.在js里先定义一个方法,用来打开窗口 具体如下: <script language="JavaScript"><!--function openwin() { ...
- js设置弹出式独立窗口页面,和 window 的方法
一般简单的情况下我们会直接使用弹层的形式来进行处理,但是有的时候是一个复杂页面,需要弹窗显示,新开页面在另一个页签显示还达不到效果,所以我们需要让浏览器打开一个新的页面,并弹出来在当前页面之上,下面我 ...
- Python实现显示进度条
文章目录 1. 普通进度条 2. 带时间的普通进度条 3. tqdm库 4. alive_progress库 5. progressbar库 1. 普通进度条 利用打印功能print进行实时刷新显示 ...
- %matplotlib inline是jupyter notebook里的命令, 意思是将那些用matplotlib绘制的图显示在页面里而不是弹出一个窗口
%matplotlib inline是jupyter notebook里的命令, 意思是将那些用matplotlib绘制的图显示在页面里而不是弹出一个窗口 终端输入jupyter notebook, ...
- html点击一个文字显示提示框,点击文字弹出一个DIV层窗口代码
点击文字弹出一个DIV层窗口代码 .black_overlay{ display: none; position: absolute; top: 0%; left: 0%; width: 100%; ...
最新文章
- SpringBoot 那些天生自带 Buff 的工具类,你用过几个?
- 啥?Transformers又来刷CV的榜了?
- Android线程间通信的几种实现方式
- 堆溢出攻击(XP SP2 - 2003)
- 牛顿方法、指数分布族、广义线性模型—斯坦福ML公开课笔记4
- html=r.text,在R中使用text()
- Fatal Error: Unable to find package java.lang in classpath or bootclasspath
- 平板电脑安装软件_概述嵌入式工业平板电脑的安装方法和注意事项!
- 前端学习(1327):node全局对象global
- 知乎香港IPO发售价定为每股32.06港元
- Unity2018.1中文更新日志速览版
- 网络攻防实验(五)——201521460003王浩洋
- Tomcat中文乱码解决办法
- 如何获得查询的执行计划?(一)
- 【原创】CGAL使用心得
- 英超必way体育:曼城6-3曼联,帽子戏法太厉害了
- winform 获取NotifyIcon的位置
- 新一配:创建数据透视表时的注意事项【转载】
- Alibaba(实习准备)—SOFARPC学习总结
- linux里数据库退格,Oracle Database for Linux 不能使用退格键
热门文章
- [Ext JS6实战]动态数据绑定
- Spring5+CXF整合开发REST之一次坑旅
- servlet过滤器入门
- android服务开启线程,android之service与intentService的不同
- 计算机三级之嵌入式系统学习笔记9
- Oracle登陆SQL Plus,Oracle基础学习登陆SQLPLUS(一)
- linux下vi编辑器的命令大全,linux下VI编辑器命令大全(超级完整版)
- 怎么看铜皮属性_阻抗匹配怎么做 及阻抗匹配的作用。
- mac 连接百度云服务器地址,教你怎么在 Mac 下把百度网盘映射到另一个文件夹
- JAVA刻度_java – 对数轴标签/刻度定制