最近看了好多人问这方面的问题,以前我也写过一篇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

如何弹出一个模式窗口来显示进度条 .相关推荐

  1. html点击按钮弹出悬浮窗_9种实现点击一个链接弹出一个小窗口的代码

    9 种实现点击一个链接弹出一个小窗口的代码 因为着是一段 javascripts 代码, 所以它们应该放在之间. 是对一些版本低的浏览器起作用,在这些老浏览器中不会将 标签中的代码作为文本显示出来.要 ...

  2. html弹出非模式窗口,JavaScript模态窗口和非模态窗口(转)

    JavaScript中弹出的窗口有模态窗口和非模态窗口.模态窗口就是打开一个子窗口,如果这个子窗口不关闭,就不能操作它的父窗口,原来程序暂停执行,直到这个模态窗口关闭 后才回到原来程序继续.非模态的就 ...

  3. html点击按钮弹出悬浮窗_点击文字或按钮弹出一个DIV窗口(DIV悬浮窗口)

    以下是弹出窗口代码: 点击文字弹出一个DIV层窗口代码 .black_overlay{ display: none; position: absolute; top: 0%; left: 0%; wi ...

  4. html弹窗超链接,点出超链接弹出一个小窗口

    1.在js里先定义一个方法,用来打开窗口 具体如下: ?参数解释: window.open?弹出新窗口的命令: 'page.html'?弹出窗口的文件名: 'newwindow'?弹出窗口的名字(不是 ...

  5. 点出超链接弹出一个小窗口

    1.在js里先定义一个方法,用来打开窗口 具体如下: <script language="JavaScript"><!--function openwin() { ...

  6. js设置弹出式独立窗口页面,和 window 的方法

    一般简单的情况下我们会直接使用弹层的形式来进行处理,但是有的时候是一个复杂页面,需要弹窗显示,新开页面在另一个页签显示还达不到效果,所以我们需要让浏览器打开一个新的页面,并弹出来在当前页面之上,下面我 ...

  7. Python实现显示进度条

    文章目录 1. 普通进度条 2. 带时间的普通进度条 3. tqdm库 4. alive_progress库 5. progressbar库 1. 普通进度条 利用打印功能print进行实时刷新显示 ...

  8. %matplotlib inline是jupyter notebook里的命令, 意思是将那些用matplotlib绘制的图显示在页面里而不是弹出一个窗口

    %matplotlib inline是jupyter notebook里的命令, 意思是将那些用matplotlib绘制的图显示在页面里而不是弹出一个窗口 终端输入jupyter notebook,  ...

  9. html点击一个文字显示提示框,点击文字弹出一个DIV层窗口代码

    点击文字弹出一个DIV层窗口代码 .black_overlay{ display: none; position: absolute; top: 0%; left: 0%; width: 100%; ...

最新文章

  1. SpringBoot 那些天生自带 Buff 的工具类,你用过几个?
  2. 啥?Transformers又来刷CV的榜了?
  3. Android线程间通信的几种实现方式
  4. 堆溢出攻击(XP SP2 - 2003)
  5. 牛顿方法、指数分布族、广义线性模型—斯坦福ML公开课笔记4
  6. html=r.text,在R中使用text()
  7. Fatal Error: Unable to find package java.lang in classpath or bootclasspath
  8. 平板电脑安装软件_概述嵌入式工业平板电脑的安装方法和注意事项!
  9. 前端学习(1327):node全局对象global
  10. 知乎香港IPO发售价定为每股32.06港元
  11. Unity2018.1中文更新日志速览版
  12. 网络攻防实验(五)——201521460003王浩洋
  13. Tomcat中文乱码解决办法
  14. 如何获得查询的执行计划?(一)
  15. 【原创】CGAL使用心得
  16. 英超必way体育:曼城6-3曼联,帽子戏法太厉害了
  17. winform 获取NotifyIcon的位置
  18. 新一配:创建数据透视表时的注意事项【转载】
  19. Alibaba(实习准备)—SOFARPC学习总结
  20. linux里数据库退格,Oracle Database for Linux 不能使用退格键

热门文章

  1. [Ext JS6实战]动态数据绑定
  2. Spring5+CXF整合开发REST之一次坑旅
  3. servlet过滤器入门
  4. android服务开启线程,android之service与intentService的不同
  5. 计算机三级之嵌入式系统学习笔记9
  6. Oracle登陆SQL Plus,Oracle基础学习登陆SQLPLUS(一)
  7. linux下vi编辑器的命令大全,linux下VI编辑器命令大全(超级完整版)
  8. 怎么看铜皮属性_阻抗匹配怎么做 及阻抗匹配的作用。
  9. mac 连接百度云服务器地址,教你怎么在 Mac 下把百度网盘映射到另一个文件夹
  10. JAVA刻度_java – 对数轴标签/刻度定制