public JobManager(Configuration config) { HistoricFPS = new double[config.ProgressMemory]; Resolution = config.ProgressResolution; Job = new RenderJob(); Job.OutputDirectory = config.OutputPath; Job.TempDirectory = config.TempPath; }
private void JobProgressed(RenderJob job) { lock (manager.UpdateLock) { if (manager.UpdateCount % manager.Resolution == 0 && job.State == ProcessState.Running) { manager.UpdateCount = 1; Action reportProgress = delegate () { int totalFrames = job.TotalFrames; int completedFrames = job.CompletedFrames; TimeSpan elapsed = DateTime.Now - manager.LastPoll; manager.LastPoll = DateTime.Now; progressBar.Value = (int)(Math.Round((double)(100 * completedFrames) / (double)totalFrames)); Microsoft.WindowsAPICodePack.Taskbar.TaskbarManager.Instance.SetProgressValue(progressBar.Value, 100); double FPS = (completedFrames - manager.LastFramesCompleted) / elapsed.TotalSeconds; manager.HistoricFPS[manager.HistoricFPSIndex] = FPS; manager.HistoricFPSIndex++; if (manager.HistoricFPSIndex == manager.HistoricFPS.Length) manager.HistoricFPSIndex = 0; double averageFPS = manager.HistoricFPS.Where(n => n != 0).Average(); if (averageFPS != 0) { lblRunFPS.Text = Math.Round(averageFPS, 1).ToString("0.0"); lblRunRealtime.Text = Math.Round((100 * averageFPS) / (double)nudFPS.Value, 1).ToString("0.0") + "%"; TimeSpan ETA = TimeSpan.FromSeconds((totalFrames - completedFrames) / averageFPS); DateTime ETATime = DateTime.Now.Add(ETA); lblRunETA.Text = ETA.ToString("hh'h 'mm'm 'ss's'") + " – " + ETATime.ToString("t"); } manager.LastFramesCompleted = completedFrames; }; this.Invoke(reportProgress); } else { manager.UpdateCount++; } } }