Beispiel #1
0
 /// <summary>
 /// 显示长时间运行任务的进度
 /// </summary>
 /// <param name="current">任务在进度条的当前位置</param>
 /// <param name="last">任务完成位置</param>
 public static void Progress(int current, int last)
 {
     if (pCancelable && ((IProgressStatusCancel)pProgressStatus).Canceled)
     {
         throw new ProgressCancelException();
     }
     try
     {
         double lCurTime = DateTime.Now.ToOADate();
         if (current == last) //进度条走完,关闭显示进度条
         {
             pProgressStatus.Progress(current, last);
             pProgressStartTime  = 0;
             pProgressLastUpdate = 0;
             Flush();
         }
         else if (pProgressStartTime == 0) //开始新的进度条显示
         {
             pProgressStatus.Progress(current, last);
             pProgressStartTime  = lCurTime;
             pProgressLastUpdate = lCurTime;
             Flush();
         }
         else if (pProgressRefresh == 0 || lCurTime - pProgressLastUpdate > pProgressRefresh)
         {
             //自上一次更新,时间间隔足够长
             pProgressStatus.Progress(current, last);
             Application.DoEvents();
             Flush();
             pProgressLastUpdate = lCurTime;
         }
     }
     catch (Exception) //进度条显示过程中,忽视任何异常
     {
     }
 }