示例#1
0
 private void ReportProgress(bool minimizeFrequentUpdates)
 {
     lock (this._progressLock)
     {
         DateTime utcNow = DateTime.UtcNow;
         if (!minimizeFrequentUpdates || (((utcNow - this._progressStartTime) >= TimeSpan.FromSeconds(1.0)) && (this._progressReportLastTime.Equals(DateTime.MinValue) || ((utcNow - this._progressReportLastTime) >= TimeSpan.FromMilliseconds(200.0)))))
         {
             double countOfFinishedChildJobs;
             double num2;
             int    num3;
             this._progressReportLastTime = utcNow;
             lock (this._lockObject)
             {
                 num2 = this._countOfAllChildJobs;
                 countOfFinishedChildJobs = this.CountOfFinishedChildJobs;
             }
             if (num2 >= 1.0)
             {
                 num3 = (int)((100.0 * countOfFinishedChildJobs) / num2);
             }
             else
             {
                 num3 = -1;
             }
             num3 = Math.Max(-1, Math.Min(100, num3));
             ProgressRecord progressRecord = new ProgressRecord(this._progressActivityId, base.Command, this.StatusMessage);
             if (this.IsThrottlingJobCompleted)
             {
                 if (this._progressReportLastTime.Equals(DateTime.MinValue))
                 {
                     goto Label_0192;
                 }
                 progressRecord.RecordType       = ProgressRecordType.Completed;
                 progressRecord.PercentComplete  = 100;
                 progressRecord.SecondsRemaining = 0;
             }
             else
             {
                 progressRecord.RecordType      = ProgressRecordType.Processing;
                 progressRecord.PercentComplete = num3;
                 int?secondsRemaining = null;
                 if (num3 >= 0)
                 {
                     secondsRemaining = ProgressRecord.GetSecondsRemaining(this._progressStartTime, ((double)num3) / 100.0);
                 }
                 if (secondsRemaining.HasValue)
                 {
                     progressRecord.SecondsRemaining = secondsRemaining.Value;
                 }
             }
             this.WriteProgress(progressRecord);
         }
         Label_0192 :;
     }
 }
        private void ReportProgress(bool minimizeFrequentUpdates)
        {
            lock (_progressLock)
            {
                DateTime now = DateTime.UtcNow;

                if (minimizeFrequentUpdates)
                {
                    if ((now - _progressStartTime) < TimeSpan.FromSeconds(1))
                    {
                        return;
                    }

                    if ((!_progressReportLastTime.Equals(DateTime.MinValue)) &&
                        (now - _progressReportLastTime < TimeSpan.FromMilliseconds(200)))
                    {
                        return;
                    }
                }

                _progressReportLastTime = now;

                double workCompleted;
                double totalWork;
                int    percentComplete;
                lock (_lockObject)
                {
                    totalWork     = _countOfAllChildJobs;
                    workCompleted = this.CountOfFinishedChildJobs;
                }

                if (totalWork >= 1.0)
                {
                    percentComplete = (int)(100.0 * workCompleted / totalWork);
                }
                else
                {
                    percentComplete = -1;
                }

                percentComplete = Math.Max(-1, Math.Min(100, percentComplete));

                var progressRecord = new ProgressRecord(
                    activityId: _progressActivityId,
                    activity: this.Command,
                    statusDescription: this.StatusMessage);

                if (this.IsThrottlingJobCompleted)
                {
                    if (_progressReportLastTime.Equals(DateTime.MinValue))
                    {
                        return;
                    }

                    progressRecord.RecordType       = ProgressRecordType.Completed;
                    progressRecord.PercentComplete  = 100;
                    progressRecord.SecondsRemaining = 0;
                }
                else
                {
                    progressRecord.RecordType      = ProgressRecordType.Processing;
                    progressRecord.PercentComplete = percentComplete;
                    int?secondsRemaining = null;
                    if (percentComplete >= 0)
                    {
                        secondsRemaining = ProgressRecord.GetSecondsRemaining(_progressStartTime, (double)percentComplete / 100.0);
                    }

                    if (secondsRemaining.HasValue)
                    {
                        progressRecord.SecondsRemaining = secondsRemaining.Value;
                    }
                }

                this.WriteProgress(progressRecord);
            }
        }