• 在C#中创建进度窗体


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

    步骤一:

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

       1:          /// <summary>
       2:          /// 该函数用于模拟一个耗时的操作
       3:          /// </summary>
       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根据时间来进行变动,以实现类似动画的效果,具体效果如下:

    0123

    步骤三:

    在主程序中添加一个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:          }

    主程序界面如下:

    QQ截图20121130133513

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

  • 相关阅读:
    编译内核时出现drivers/mfd/mxchdmicore.c:36:24: fatal error: mach/clock.h: No such file or directory
    IE中iframe标签显示在DIV之上的问题解决方案
    Linux驱动学习1.hello world;
    Maven安装与配置(转)
    Jmeter阶梯式压测
    Jmeter的分布式测试
    adb connect命令连接多个Android设备
    Linux当中文件的显示命令
    软件测试流程
    测试时间不够,该怎么办?
  • 原文地址:https://www.cnblogs.com/chaosimple/p/2796113.html
Copyright © 2020-2023  润新知