博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在C#中创建进度窗体
阅读量:5956 次
发布时间:2019-06-19

本文共 1526 字,大约阅读时间需要 5 分钟。

我们在设计Winform应用程序时,难免会遇到很多情况需要进行大量的运算,如果程序开始执行一个非常耗时的处理操作,在执行的过程中便会锁定用户界面,虽然程序一直在运行,单用户无法与程序之间进行交互,给用户的感觉好像整个程序已经卡死。这里,我介绍一种方法,通过使用BackgroundWorker组件创建一个相应的进度窗体来改善用户体验。

 

步骤一:

先在主程序中编写一个函数,用于模拟一个比较耗时的操作:

1:          /// 
2:          /// 该函数用于模拟一个耗时的操作
3:          /// 
4:          private void HeavyTask()
5:          {
6:              long lEnd = 99000000;
7:              for (int i = 0; i < lEnd; i++)
8:              {
9:                  double d = Math.Sqrt(Math.Log10(i) / Math.Pow(i, 2));
10:              }
11:          }

 

步骤二:

在主程序中添加一个模拟进度的窗体frmLoading。由于只涉及程序原理的设计,具体的进度条设置我就不多做介绍,可以使用委托来实现父窗体控制子窗体上的进度条。这里我引入一个Timer组件,让窗体上的Label根据时间来进行变动,以实现类似动画的效果,具体效果如下:

 

步骤三:

在主程序中添加一个Form类型的全局变量,并引入一个BackgroundWorker组件,编写相应按钮的单击事件处理函数和BackgroundWorker组件的相关事件函数,具体代码如下:

1:          private void btnCalc_Click(object sender, EventArgs e)
2:          {
3:              bgw.RunWorkerAsync();
4:   
5:              m_frmLoading = new frmLoading();
6:              m_frmLoading.ShowDialog();
7:          }
8:   
9:          private void bgw_DoWork(object sender, DoWorkEventArgs e)
10:          {
11:              HeavyTask();
12:          }
13:   
14:          private void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
15:          {
16:              m_frmLoading.Close();
17:              MessageBox.Show("任务完成!");
18:          }

 

主程序界面如下:

 

程序启动,用户点击按钮,BackgroundWorker组件便会开启异步进行耗时的操作,程序显示模拟进度窗体,等BackgroundWorker组件完成工作后,便会关闭模拟进度窗体,并提示用户相关信息。

转载于:https://www.cnblogs.com/chaosimple/archive/2012/11/30/2796113.html

你可能感兴趣的文章
shell-IF判断
查看>>
【转】Maven实战(九)---模块聚合和继承
查看>>
CloudSim介绍和使用
查看>>
VC++ 获取当前模块的路径(dll/exe)
查看>>
Shell命令_Cron使用
查看>>
POJ2425 A Chess Game[博弈论 SG函数]
查看>>
深入Spring:自定义注解加载和使用
查看>>
计划的定义与要素
查看>>
LR报错Error -27780: [GENERAL_MSG_CAT_SSL_ERROR]connect to host "XXX.XXX.com" failed解决方法
查看>>
mysql 索引B-Tree类型对索引使用的生效和失效情况详解
查看>>
获取表信息(MSSQL)
查看>>
css3 transform 旋转div
查看>>
一个batch如何通过一个网络
查看>>
沉没成本
查看>>
redux简明学习
查看>>
速度挑战 - 2小时完成HTML5拼图小游戏
查看>>
Exynos4412 IIC总线驱动开发(一)—— IIC 基础概念及驱动架构分析
查看>>
二叉树学习(二)
查看>>
外卖小程序对接飞鹅小票打印的实现
查看>>
鹅厂内部干货|微信小游戏开发技术怎么应用?
查看>>