/// <summary> /// Processes the exited. /// </summary> /// <param name="process">The process.</param> /// <param name="job">The job.</param> private void OnFfMpegProcessExited(Process process, EncodingJob job) { job.HasExited = true; Logger.Debug("Disposing stream resources"); job.Dispose(); var isSuccesful = false; try { var exitCode = process.ExitCode; Logger.Info("FFMpeg exited with code {0}", exitCode); isSuccesful = exitCode == 0; } catch { Logger.Error("FFMpeg exited with an error."); } if (isSuccesful && !job.IsCancelled) { job.TaskCompletionSource.TrySetResult(true); } else if (job.IsCancelled) { try { DeleteFiles(job); } catch { } try { job.TaskCompletionSource.TrySetException(new OperationCanceledException()); } catch { } } else { try { DeleteFiles(job); } catch { } try { job.TaskCompletionSource.TrySetException(new ApplicationException("Encoding failed")); } catch { } } // This causes on exited to be called twice: //try //{ // // Dispose the process // process.Dispose(); //} //catch (Exception ex) //{ // Logger.ErrorException("Error disposing ffmpeg.", ex); //} }