public ConcurrentJob GetJob(int index)
        {
            ConcurrentJob result = null;

            if (index >= 0 && index < jobs.Count)
            {
                result = jobs[index];
            }

            return(result);
        }
        public ConcurrentJob GetJob(string name)
        {
            ConcurrentJob result = null;

            for (var i = 0; i < jobs.Count; i++)
            {
                if (jobs[i].Name == name)
                {
                    result = jobs[i];
                    break;
                }
            }

            return(result);
        }
        public int Add(Action <ConcurrentJob, object> job, string name = "", ConcurrentJobCreationOptions options = ConcurrentJobCreationOptions.AddRunRemove, object obj = null)
        {
            var           result = -1;
            ConcurrentJob cj     = null;

            lock (AppDomain.CurrentDomain)
            {
                cj = new ConcurrentJob(this, job, options, name);
                jobs.Add(cj);

                result = jobs.Count - 1;
            }

            if (options == ConcurrentJobCreationOptions.AddRunRemove || options == ConcurrentJobCreationOptions.AddAndRun)
            {
                cj.Start(obj);
            }

            return(result);
        }
        public void NotifyFinish(ConcurrentJob job)
        {
            var index = -1;

            if (job.Options == ConcurrentJobCreationOptions.AddRunRemove && job.State != ConcurrentJobState.Running)
            {
                index = this.IndexOf(job);

                if (index >= 0)
                {
                    try
                    {
                        jobs.RemoveAt(index);
                    }
                    catch (Exception e)
                    {
                        Debug.WriteLine("removing job('" + job.Name + "') failed");
                        Debug.WriteLine(e.Message);
                    }
                }
            }
        }
        public RemoveResult Remove(ConcurrentJob job)
        {
            var index = this.IndexOf(job);

            return(Remove(index));
        }
 public int IndexOf(ConcurrentJob job)
 {
     return(jobs.IndexOf(job));
 }