public virtual void Remove()
 {
     NotifyForwardSequenceChanged(Next);
     if (Next != null)
     {
         Next.Previous = Previous;
     }
     Previous = null;
 }
 public BlockingQueueEnumerator(BlockingQueue <T> BlockingQueue, bool Consuming, int Timeout)
 {
     this.blockingqueue = BlockingQueue;
     this.timeout       = Timeout;
     this.consuming     = Consuming;
     this.currentnode   = null;
     lock (BlockingQueue.sync)
     {
         CurrentNode = this.blockingqueue.nodezero;
     }
 }
 protected void OnForwardSequenceChanged(object sender, SequenceChangedEventArgs args)
 {
     Next = args.UpdatedNextNode;
 }
 protected void NotifyForwardSequenceChanged(BlockingQueueNode UpdatedNextNode)
 {
     forwardsequencechangedevent?.Invoke(this, new SequenceChangedEventArgs(UpdatedNextNode));
 }
 public SequenceChangedEventArgs(BlockingQueueNode UpdatedNextNode)
 {
     this.UpdatedNextNode = UpdatedNextNode;
 }