private void FixupProcess(Process previousValue) { if (previousValue != null && ReferenceEquals(previousValue.ProcessState, this)) { previousValue.ProcessState = null; } if (Process != null) { Process.ProcessState = this; } }
public string Run(Process process) { if (!_runningProcesses.ContainsKey(process.Id)) { Task<ProcessResult> task = new Task<ProcessResult>((prc) => { return ((Process)prc).Run(); }, process ); task.ContinueWith(t => { Task obj; _runningProcesses.TryRemove(process.Id, out obj); if (ProcessFinished != null) { ProcessFinished(process, new ManagerEventArgs { ExecutedAt = DateTime.Now, Result = t.Result }); } }); if (_runningProcesses.TryAdd(process.Id, task)) { task.Start(); if (ProcessStarted != null) { ProcessStarted(process, null); } } return "Started"; } return "Already Running"; }