我有一个类,是用来缓存网络发送的数据包,这个类里面我用到了 Queue<T>,T 为数据包(ABUSPacket),UI线程添加(Enqueue),然后由一个Timer隔一段时间发一个(Dequeue),但是没有任何东西发出去
断点看到,添加时有数据包,添加一次Count就加一(如:有8个),这个没错。但是到了Timer事件处理时,Queue.Count竟然等于0,再添加时,断点一看,8个,我擦勒,肿么回事啊???

解决方案 »

  1.   

            private Queue<ABUSPacket> _all_queue = new Queue<ABUSPacket>();        /// <summary>
            /// 压入缓存栈
            /// </summary>
            /// <param name="Packet">网络数据包</param>
         internal void Enqueue(ABUSPacket Packet)
         {
                _all_queue.Enqueue(Packet);
         }     /// <summary>
         /// 弹出缓存栈
         /// </summary>
            internal ABUSPacket Dequeue()
            {
                if (_all_queue.Count != 0)
                {
                    return _all_queue.Dequeue();
                }
                else
                {
                    return null;
                }
            }
      

  2.   


    private Queue<ABUSPacket> _all_queue = new Queue<ABUSPacket>();  /// <summary>
      /// 压入缓存栈
      /// </summary>
      /// <param name="Packet">网络数据包</param>
      internal void Enqueue(ABUSPacket Packet) //UI线程执行(按钮)
      {
        _all_queue.Enqueue(Packet); //断点时表示正常
      }  /// <summary>
      /// 弹出缓存栈
      /// </summary>
      internal ABUSPacket Dequeue()// 由Timer执行
      {
        if (_all_queue.Count != 0) // 永远等于0
        {
          return _all_queue.Dequeue();// 所以这里永远执行不了
        }
        else
        {
          return null;
        }
      }
      
      

  3.   

    生存期绝对没有错 声明与new都在方法外面
      

  4.   

    不是在方法外面就万事大吉的,你忘记了你还有timer
      

  5.   

    保证应用这个类的只有一个,一对一的,timer也只有一个
    是这样的:一个网络类里有一个Timer,一个缓存类,Timer到时间就从缓存中提取一个数据包并发送
      

  6.   

    网络类常驻,Timer是AutoSet的,也常驻,同步类也常驻
      

  7.   

    看到最后,原来是我自己搞错的。谢谢 hdt(倦怠)