自己寫了一個多線程的工作隊列,能夠實現對隊列中對象的自動處理。多線程添加元素到隊列中,隊列根據綁定
的事件進行自動處理,可以設置WorkSequential屬性來實現對隊列處理的單線程(嚴格順序處理)或者多線程處理(循序出隊,但是
多線程處理,不保證對隊列元素的處理順利)的選擇。
源碼:
代碼
/***********多線程的工作隊列***************
* 此工作隊列保證線程安全性
*
*
*
*
* *******/
namespace WorkQueue
{
using System.Collections.Generic;
using System;
using System.Threading;
public delegate void UserWorkEventHandler<T>(object sender, WorkQueue<T>.EnqueueEventArgs e);
public class WorkQueue<T>
{
private bool IsWorking; //表明處理線程是否正在工作
private object lockIsWorking = new object();//對IsWorking的同步對象
private Queue<T> queue; //實際的隊列
private object lockObj = new object(); //隊列同步對象
/// <summary>
/// 綁定用戶需要對隊列中的item對象
/// 施加的操作的事件
/// </summary>
public event UserWorkEventHandler<T> UserWork;
public WorkQueue(int n)
{
queue = new Queue<T>(n);
}
public WorkQueue()
{
queue = new Queue<T>();
}
/// <summary>
/// 謹慎使用此函數,
/// 只保證此瞬間,隊列值為空
/// </summary>
/// <returns></returns>
public bool IsEmpty()
{
lock (lockObj)
{