/// <summary> /// 向缓冲区中加入数据 /// </summary> /// <param name="item"></param> public virtual void InsertQueueItem(TQueueItem item) { lock (((ICollection)this._itemBuffer).SyncRoot) { if (this._isWorking) { this._itemBuffer.Enqueue(item); } else { EventHandler <QueueItemHandleEventArg <TQueueItem> > handler = this.ProcessBussiness; QueueItemEx <TQueueItem> itemEx = new QueueItemEx <TQueueItem>(item, handler); handler.BeginInvoke(this, new QueueItemHandleEventArg <TQueueItem>(item), ProcessCallback, itemEx); this._isWorking = true; } } }
/// <summary> /// 处理结束的回调 /// </summary> protected void CallBackProcess(object state) { IAsyncResult ar = (IAsyncResult)state; QueueItemEx <TQueueItem> qie = (QueueItemEx <TQueueItem>)ar.AsyncState; qie.Handler.EndInvoke(ar); lock (((ICollection)this._itemBuffer).SyncRoot) { if (this._itemBuffer.Count > 0) { TQueueItem item = this._itemBuffer.Dequeue(); EventHandler <QueueItemHandleEventArg <TQueueItem> > handler = this.ProcessBussiness; QueueItemEx <TQueueItem> itemEx = new QueueItemEx <TQueueItem>(item, handler); handler.BeginInvoke(this, new QueueItemHandleEventArg <TQueueItem>(item), ProcessCallback, itemEx); } else { this._isWorking = false; } } }