public void RunJob(JobDoWorkEventArgs arg) { DoJob(null, arg); }
static private void ScheduleJobBackgroundLocal(JRunningJob job) { BackgroundWorker worker = new AbortableBackgroundWorker(); worker.WorkerSupportsCancellation = true; worker.WorkerReportsProgress = true; worker.DoWork += (sd, ew) => { BackgroundWorker wk = sd as BackgroundWorker; if (wk.CancellationPending) { ew.Cancel = true; return; } try { JobDoWorkEventArgs arg = new JobDoWorkEventArgs(); job.JobLog.Info("Job started " + job.Name); arg.StageResult = RunningJobResultEnum.ok; job.Stage = RunningJobStageEnum.running.ToString(); job.JJobType.JobBatchRunningDict.TryAdd(job.JRunningJobId, job); Dm.Instance.SaveObject(job); job.RunJob(arg); if (arg.StageResult == RunningJobResultEnum.ok) { ew.Result = RunningJobStageEnum.complated; } else if (arg.StageResult == RunningJobResultEnum.warning) { ew.Result = RunningJobStageEnum.warning; } else if (arg.StageResult == RunningJobResultEnum.error) { ew.Result = RunningJobStageEnum.error; } if (job.CancellationPending) { ew.Cancel = true; } } catch (Exception ex) { if (ex is System.Threading.ThreadAbortException) { job.JobLog.Warn("Job aborted"); } else { job.JobLog.Error("Job fatal error", ex); } ew.Result = RunningJobStageEnum.exception; JobManager.Instance.ComplateJob(job, RunningJobStageEnum.exception); } finally { ResetJob(job); } }; worker.RunWorkerCompleted += (sd, ek) => { if (ek.Cancelled == true) { job.JobLog.Debug("Job aborted"); JobManager.Instance.ComplateJob(job, RunningJobStageEnum.aborted); } else { if (RunningJobStageEnum.exception.Equals(ek.Result)) { //do nothing } else if (RunningJobStageEnum.warning.Equals(ek.Result)) { JobManager.Instance.ComplateJob(job, RunningJobStageEnum.warning); } else if (RunningJobStageEnum.error.Equals(ek.Result)) { JobManager.Instance.ComplateJob(job, RunningJobStageEnum.error); } else { JobManager.Instance.ComplateJob(job, RunningJobStageEnum.complated); } } }; worker.ProgressChanged += (sd, pc) => { localReportProgresJob(job, pc.ProgressPercentage); }; //run worker job.JobObject = worker; (job.JobObject as BackgroundWorker).RunWorkerAsync(); if (job.JJobType != null) { job.JJobType.LastRunDate = DateTimeOffset.Now; Dm.Instance.SaveObject(job.JJobType); } }