/// <summary>Adds a new item to process to the end of the queue.</summary> /// <param name="action">The action to process.</param> /// <returns>A handle to the item within the queue.</returns> public ProcessQueueHandle Add(Action action) { // Setup initial conditions. if (action == null) throw new ArgumentNullException("action"); // Create the handle and store ite. var handle = new ProcessQueueHandle(this, action, OnProcessing, OnProcessed); lock (queue) { queue.Enqueue(handle); } // Finish up. return handle; }
/// <summary>Removes the given handle from the queue.</summary> /// <param name="handle">The handle to remove.</param> public void Remove(ProcessQueueHandle handle) { if (handle == null) return; lock (queue) { var list = queue.ToList(); list.Remove(handle); queue.Clear(); foreach (var item in list) { queue.Enqueue(item); } } }
/// <summary>Determines whether the specified handle is contained within the queue.</summary> /// <param name="handle">The handle to look for.</param> public bool Contains(ProcessQueueHandle handle) { return queue.Contains(handle); }
/// <summary>Gets the position of a handle within the queue.</summary> /// <param name="handle">The handle to examine.</param> /// <returns>The position within the queue, descending (0 is next to be processed, -1 means already processed or not part of this queue).</returns> public int GetPosition(ProcessQueueHandle handle) { if (handle == null) return -1; return queue.ToList().IndexOf(handle); }
public ProcessQueueEventArgs(ProcessQueueHandle handle) { Handle = handle; }