Exemple #1
0
        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;
            }
        }