private void DoProgress() { var now = ProgressManager.Now; if (status != ProgressSettings.Status) { status = ProgressSettings.Status; } var t = TimeSpan.FromMilliseconds(now - startProgressDateTime); if (t > TimeSpan.FromMilliseconds(1000)) { if (!Visible) { Show(ProgramCore.MainForm); ProgressManager.ProgressHWnd = Handle; } if (Visible) { try { status = ProgressSettings.Status; percentDone = (int)ProgressSettings.PercentDone; subPercentDone = (int)ProgressSettings.SubPercentDone; subStatus = ProgressSettings.SubStatus; if (ProgressSettings.PercentDone > 0) { var tt = new TimeSpan((long)(100 * t.Ticks / ProgressSettings.PercentDone)); //totalTime if (previousTotalTime - TimeSpan.FromMilliseconds(5000) < tt && tt < previousTotalTime + TimeSpan.FromMilliseconds(5000)) { tt = previousTotalTime; } previousTotalTime = tt; var rt = tt - t; //remaingingTime remainedTimeLabel.Text = @"Time elapsed: " + (Math.Round(t.TotalDays) != 0 ? StringConverter.DaysToStr((int)Math.Round(t.TotalDays)) : "") + (t.Hours != 0 ? StringConverter.HoursToStr(t.Hours) : "") + (t.Minutes != 0 ? StringConverter.MinutesToStr(t.Minutes) : "") + (t.Seconds != 0 || t.TotalSeconds < 1 ? t.Seconds.SecondsToStr() : "") + ((rt <= TimeSpan.FromMilliseconds(0)) ? "" : ".Remaining time: " + (Math.Round(rt.TotalDays) != 0 ? StringConverter.DaysToStr((int)Math.Round(rt.TotalDays)) : "") + (rt.Hours != 0 ? StringConverter.HoursToStr(rt.Hours) : "") + (rt.Minutes != 0 ? StringConverter.MinutesToStr(rt.Minutes) : "") + (rt.Seconds != 0 || rt.TotalSeconds < 1 ? rt.Seconds.SecondsToStr() : "")); } else { remainedTimeLabel.Text = ""; } } catch { remainedTimeLabel.Text = ""; } } if (Visible) { UpdateFormStyle(); } } }