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