public gMkvExtractMethod ExtractMethod(gMKVExtract argGmkvExtract) { switch (_ExtractionMode) { case FormMkvExtractionMode.Tracks: return(argGmkvExtract.ExtractMKVSegmentsThreaded); case FormMkvExtractionMode.Cue_Sheet: return(argGmkvExtract.ExtractMkvCuesheetThreaded); case FormMkvExtractionMode.Tags: return(argGmkvExtract.ExtractMkvTagsThreaded); case FormMkvExtractionMode.Timecodes: return(argGmkvExtract.ExtractMKVTimecodesThreaded); case FormMkvExtractionMode.Tracks_And_Timecodes: return(argGmkvExtract.ExtractMKVSegmentsThreaded); case FormMkvExtractionMode.Cues: return(argGmkvExtract.ExtractMKVCuesThreaded); case FormMkvExtractionMode.Tracks_And_Cues: return(argGmkvExtract.ExtractMKVSegmentsThreaded); case FormMkvExtractionMode.Tracks_And_Cues_And_Timecodes: return(argGmkvExtract.ExtractMKVSegmentsThreaded); default: throw new Exception("Unsupported Extraction Mode!"); } }
private void RunJobs(List <gMKVJobInfo> argJobInfoList) { _ExceptionBuilder.Length = 0; foreach (gMKVJobInfo jobInfo in argJobInfoList) { try { // check for abort if (_AbortAll) { break; } // get job from jobInfo gMKVJob job = jobInfo.Job; // create the new gMKVExtract object _gMkvExtract = new gMKVExtract(job.MKVToolnixPath); _gMkvExtract.MkvExtractProgressUpdated += _gMkvExtract_MkvExtractProgressUpdated; _gMkvExtract.MkvExtractTrackUpdated += _gMkvExtract_MkvExtractTrackUpdated; // increate the current job index _CurrentJob++; // start the thread Thread myThread = new Thread(new ParameterizedThreadStart(job.ExtractMethod(_gMkvExtract))); jobInfo.StartTime = DateTime.Now; jobInfo.State = JobState.Running; grdJobs.Refresh(); myThread.Start(job.ParametersList); btnAbort.Enabled = true; btnAbortAll.Enabled = true; gTaskbarProgress.SetState(this, gTaskbarProgress.TaskbarStates.Normal); Application.DoEvents(); while (myThread.ThreadState != System.Threading.ThreadState.Stopped) { Application.DoEvents(); } jobInfo.EndTime = DateTime.Now; // check for exceptions if (_gMkvExtract.ThreadedException != null) { jobInfo.State = JobState.Failed; grdJobs.Refresh(); throw _gMkvExtract.ThreadedException; } else { jobInfo.State = JobState.Completed; grdJobs.Refresh(); Application.DoEvents(); } } catch (Exception ex) { _ExceptionBuilder.AppendFormat("Exception for job {0}: {1}\r\n", jobInfo.ToString(), ex.Message); } finally { if (_gMkvExtract != null) { _gMkvExtract.MkvExtractProgressUpdated -= _gMkvExtract_MkvExtractProgressUpdated; _gMkvExtract.MkvExtractTrackUpdated -= _gMkvExtract_MkvExtractTrackUpdated; } } } }