Exemplo n.º 1
0
        private void FixupProcess(Process previousValue)
        {
            if (previousValue != null && ReferenceEquals(previousValue.ProcessState, this))
            {
                previousValue.ProcessState = null;
            }

            if (Process != null)
            {
                Process.ProcessState = this;
            }
        }
Exemplo n.º 2
0
        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";
        }