public void ReportProgress(int percentage, DecodingProgress.State status, string message) { int eta; DecodingProgress ip = new DecodingProgress(); ip.DecodingState = status; ip.Message = message; // a naive ETA formula: ETA = ElapsedMinutes * 100 / percentDone - Elapsed if (percentage > 0) { elapsed = (DateTime.Now.Subtract(startTime)); eta = (int)(elapsed.TotalMinutes * 100 / percentage - elapsed.TotalMinutes); if (eta <= 0) { ip.ETA = Properties.Resources.FinishingSoon; } else { TimeSpan remaining = TimeSpan.FromMinutes(eta + 1); ip.ETA = String.Format(Properties.Resources.FinishingInHours, (int)remaining.TotalHours, remaining.Minutes); } } else { ip.ETA = "n/a"; } OnProgressChanged(new ProgressChangedEventArgs(percentage, ip)); }
internal static DecodingProgress CreateProgress(string message, DecodingProgress.State state) { DecodingProgress ip = new DecodingProgress(); ip.Message = message; ip.DecodingState = state; ip.ETA = "n/a"; return(ip); }
public void ReportProgress(int percentage, DecodingProgress.State state, string message) { DecodingProgress ip = CreateProgress(message, state); ProgressChanged(this, new ProgressChangedEventArgs(percentage, ip)); }