private void UpdateProgress() { _timer.Elapsed -= OnTimer; _progressBar.Maximum = _totalSize; _progressBar.Value = _processedSize; double percents = (_totalSize == 0) ? 0.0 : 100 * _processedSize / (double)_totalSize; TimeSpan elapsed = DateTime.Now - _begin; double speed = _processedSize / Math.Max(elapsed.TotalSeconds, 1); if (speed < 1) { speed = 1; } TimeSpan left = TimeSpan.FromSeconds((_totalSize - _processedSize) / speed); _progressText.Text = String.Format("{0:F2}%", percents); _beginTimeText.Text = String.Format("{1}: {0:mm\\:ss}", elapsed, Lang.MeasurementsElapsed); _speedText.Text = FormatHelper.BytesFormat(speed) + " / " + Lang.MeasurementsSecondAbbr; _endTimeText.Text = String.Format("{1}: {0:mm\\:ss}", left, Lang.MeasurementsRemaining); _timer.Elapsed += OnTimer; }