/// <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) //进度条显示过程中,忽视任何异常 { } }