使用一个线程专门完成某种任务。
/// <summary> /// 线程工作队列 /// </summary> /// <typeparam name="T"></typeparam> public class ThreadWorkQueue<T> where T : class { public Action<T> OnDequeue { get; set; } /// <summary> /// 开始线程,初始化线程 /// </summary> public void Init() { _pQueue = new Queue<T>(); _hasTask = new ManualResetEvent(false); _taskThread = new Thread(Process); _taskThread.IsBackground = true; _taskThread.Start(); } /// <summary> /// 添加任务 /// </summary> /// <param name="param"></param> public static void AddTask(T param) { _pQueue.Enqueue(param); //LogHelper.Info("-- 任务开始 Set Start--"); _hasTask.Set(); } /// <summary> /// 任务队列 /// </summary> private static Queue<T> _pQueue; /// <summary> /// 用于通知是否有新数据要处理的“信号器” /// </summary> private static ManualResetEvent _hasTask; /// <summary> /// 用于处理任务的线程 /// </summary> private static Thread _taskThread; /// <summary> /// 理队列中的任务 /// </summary> private void Process() { while (true) { try { // 等待接收信号,阻塞线程。 //LogHelper.Info("-- 任务开始 WaitOne Start--"); _hasTask.WaitOne(); var p = _pQueue.Dequeue(); OnDequeue(p); if (_pQueue.Count < 1) { //LogHelper.Info("-- 任务中断 Reset Start--"); _hasTask.Reset(); } } catch (ThreadAbortException ex) { //LogHelper.Error("主处理进程错误 ThreadAbortException", ex); throw ex; } catch (Exception ex) { //LogHelper.Error("主处理进程错误", ex); } } } }