示例#1
0
 /// <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;
         }
     }
 }
示例#2
0
        /// <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;
                }
            }
        }