예제 #1
0
 public override void Push(Bag bagtoqueue)
 {
     if (bagtoqueue.IsNull())
     {
         return;
     }
     lock (BagsQueue)
     {
         if (BagsQueue.Count >= _setsize)
         {
             return;
         }
         BagsQueue.Enqueue(bagtoqueue);
         IsEmpty = false;
         var count = BagsQueue.Count;
         if (count < _setsize - 1)
         {
             BagsQueue.Enqueue(null);
         }
         if (count == _setsize)
         {
             IsFull = true;
         }
     }
     OnQueueChangedEventHandler?.Invoke(this, EventArgs.Empty);
 }
예제 #2
0
        public override Bag Remove()
        {
            Bag bag;

            lock (BagsQueue)
            {
                if (BagsQueue.Count < 1)
                {
                    IsEmpty = true;
                    return(null);
                }

                bag    = BagsQueue.Dequeue();
                IsFull = false;
            }
            OnQueueChangedEventHandler?.Invoke(this, EventArgs.Empty);
            return(bag);
        }
예제 #3
0
        public override void MoveBagToNextNode()
        {
            lock (BagsQueue)
            {
                var next = DetermineNextConveyorNode();
                while (next.IsNull())
                {
                    return;
                }

                if (next.IsFull)
                {
                    return;
                }
                var bag = Remove();
                if (bag.IsNull())
                {
                    return;
                }
                next.Push(bag);
                OnQueueChangedEventHandler?.Invoke(this, EventArgs.Empty);
            }
        }