private void bw_DoWork(DoWorkEventArgs e, JobInfo jobInfo) { Process p = jobInfo.CreateProcess(ffmpeg); p.OutputDataReceived += (s, ea) => Log(ea.Data); p.ErrorDataReceived += (s, ea) => Log(ea.Data); var item = AddToQueue(jobInfo); logger.Log(p.StartInfo.FileName + " " + p.StartInfo.Arguments); p.Start(); p.BeginOutputReadLine(); p.BeginErrorReadLine(); p.WaitForExit(); RemoveFromQueue(item); switch (p.ExitCode) { // Kill() case -1: jobInfo.Result = JobInfo.EResult.Cancel; break; // OK case 0: jobInfo.Result = JobInfo.EResult.Success; break; // ffmpeg error default: jobInfo.Result = JobInfo.EResult.Error; break; } e.Result = jobInfo; p.Dispose(); }