private void BackgroundWorkerDoWork(object sender, DoWorkEventArgs e) { JobItem jobItem = (JobItem)e.Argument; try { // 预先的检查与错误处理 if (jobItem.JobConfig.VideoMode == StreamProcessMode.None && jobItem.JobConfig.AudioMode == StreamProcessMode.None) { this.SetJobEventAndReportProgress(jobItem, JobEvent.Error); MessageBox.Show(jobItem.SourceFile + "\n源文件不是视频文件,或设置有错误。", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (MyIO.Exists(jobItem.DestFile) && !jobItem.UserConfirmedOverwriteFile) { if (MessageBox.Show(jobItem.DestFile + "\n目标文件已存在。决定覆盖吗?", "文件已存在", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK) { jobItem.UserConfirmedOverwriteFile = true; } else { this.SetJobEventAndReportProgress(jobItem, JobEvent.OneJobItemCancelled); return; } } // 工作过程 this.SetJobEventAndReportProgress(jobItem, JobEvent.OneJobItemProcessing); if (jobItem.JobConfig.VideoMode == StreamProcessMode.Encode) { if (this.EncodeVideo(jobItem, e) == false) { return; } } if (jobItem.JobConfig.AudioMode == StreamProcessMode.Encode) { if (this.EncodeAudio(jobItem, e) == false) { return; } } if (jobItem.MuxingInfo != null) { if (this.Mux(jobItem, e) == false) { return; } } if (jobItem.State != JobState.Error) { this.SetJobEventAndReportProgress(jobItem, JobEvent.OneJobItemDone); } } catch (Exception exception) { MessageBox.Show("发生了一个错误。\n" + exception.ToString(), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); this.SetJobEventAndReportProgress(jobItem, JobEvent.Error); } finally { jobItem.ClearTempFiles(); if (this.workingJobItems[this.workingJobItems.Count - 1] == jobItem) { this.SetJobEventAndReportProgress(jobItem, JobEvent.AllDone); } e.Result = jobItem; } }