public void UpdateProgress(int current, int total, TimeKeeper timekeeper)
        {
            _TotalCount = total;
            _Current    = current;
            timekeeper.RecordTime();
            if (current > 100 && current < total)
            {
                var sum                        = (DateTime.Now - timekeeper.BeginTaskDatetime.Value);
                var avgMilliseconds            = sum.TotalMilliseconds / current;
                var remain                     = total - current;
                var remainTimesAvgMilliseconds = remain * avgMilliseconds;

                var now = DateTime.Now;

                if (_previousUpdateDateTime.HasValue)
                {
                    var duration = now - _previousUpdateDateTime.Value;
                    if (duration.Seconds >= 1)
                    {
                        EstimateRemainTime      = TimeSpan.FromMilliseconds(remainTimesAvgMilliseconds);
                        _previousUpdateDateTime = now;
                    }
                }
                else
                {
                    _previousUpdateDateTime = now;
                }
            }
            else if (current == total)
            {
                EstimateRemainTime      = null;
                _previousUpdateDateTime = null;
            }
            RaisePropertyChanged(PropertyNameUtility.GetPropertyName(() => Current));
            RaisePropertyChanged(PropertyNameUtility.GetPropertyName(() => Progress));
            RaisePropertyChanged(PropertyNameUtility.GetPropertyName(() => EstimateRemainTime));
        }