Queue 发神经了!!!!高手快进!!!标题要长长长长长长长长长长长

goandyni 2012-07-19 06:41:38
我有一个类,是用来缓存网络发送的数据包,这个类里面我用到了 Queue<T>,T 为数据包(ABUSPacket),UI线程添加(Enqueue),然后由一个Timer隔一段时间发一个(Dequeue),但是没有任何东西发出去
断点看到,添加时有数据包,添加一次Count就加一(如:有8个),这个没错。但是到了Timer事件处理时,Queue.Count竟然等于0,再添加时,断点一看,8个,我擦勒,肿么回事啊???
...全文
73 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
goandyni 2012-07-19
  • 打赏
  • 举报
回复
看到最后,原来是我自己搞错的。谢谢 hdt(倦怠)
goandyni 2012-07-19
  • 打赏
  • 举报
回复
网络类常驻,Timer是AutoSet的,也常驻,同步类也常驻
goandyni 2012-07-19
  • 打赏
  • 举报
回复
保证应用这个类的只有一个,一对一的,timer也只有一个
是这样的:一个网络类里有一个Timer,一个缓存类,Timer到时间就从缓存中提取一个数据包并发送
代码小天王 2012-07-19
  • 打赏
  • 举报
回复


既然拿来做缓存 那你这种字段能保证缓存的生存周期么
cnfixit 2012-07-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
生存期绝对没有错 声明与new都在方法外面
[/Quote]
不是在方法外面就万事大吉的,你忘记了你还有timer
goandyni 2012-07-19
  • 打赏
  • 举报
回复
生存期绝对没有错 声明与new都在方法外面
goandyni 2012-07-19
  • 打赏
  • 举报
回复
生存期是对象级别
goandyni 2012-07-19
  • 打赏
  • 举报
回复
救命啊
真相重于对错 2012-07-19
  • 打赏
  • 举报
回复
考虑变量的生存期,和所属对象
goandyni 2012-07-19
  • 打赏
  • 举报
回复
自己顶,高手呢~~~~~
goandyni 2012-07-19
  • 打赏
  • 举报
回复

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;
}
}
goandyni 2012-07-19
  • 打赏
  • 举报
回复
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;
}
}

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧