/// <summary>
		/// Initializes a new instance of the BackgroundThreadPoolJob class
		/// </summary>
		/// <param name="startInfo">The start information regarding thread arguments and a callback method</param>
		public BackgroundThreadPoolJob(string name, BackgroundThreadStartInfo startInfo)
		{
			_id = Guid.NewGuid();
			_name = name;
			_startInfo = startInfo;
			_state = BackgroundThreadPoolJobStates.Waiting;
		}
 /// <summary>
 /// Initializes a new instance of the BackgroundThreadPoolJob class
 /// </summary>
 /// <param name="startInfo">The start information regarding thread arguments and a callback method</param>
 public BackgroundThreadPoolJob(string name, BackgroundThreadStartInfo startInfo)
 {
     _id        = Guid.NewGuid();
     _name      = name;
     _startInfo = startInfo;
     _state     = BackgroundThreadPoolJobStates.Waiting;
 }
        /// <summary>
        /// Creates a thread pool job and enqueues it for the thread pool to execute
        /// </summary>
        /// <param name="startInfo">The background thread start info that will be executed as a thread pool job</param>
        /// <returns></returns>
        public virtual BackgroundThreadPoolJob QueueJob(string name, BackgroundThreadStartInfo startInfo)
        {
            // lock the queue
            lock (this.JobQueue.SyncRoot)
            {
                // create a new job
                BackgroundThreadPoolJob job = new BackgroundThreadPoolJob(name, startInfo);

                // and enqueue the job to be processed
                this.JobQueue.Enqueue(job);

                // return the job that was created and enqueued
                return(job);
            }
        }
		/// <summary>
		/// Creates a thread pool job and enqueues it for the thread pool to execute
		/// </summary>
		/// <param name="startInfo">The background thread start info that will be executed as a thread pool job</param>
		/// <returns></returns>
		public virtual BackgroundThreadPoolJob QueueJob(string name, BackgroundThreadStartInfo startInfo)
		{
			// lock the queue
			lock(this.JobQueue.SyncRoot)
			{
				// create a new job
				BackgroundThreadPoolJob job = new BackgroundThreadPoolJob(name, startInfo);
				
				// and enqueue the job to be processed
				this.JobQueue.Enqueue(job);

				// return the job that was created and enqueued
				return job;
			}
		}