C# 清空集合

C# 清空集合,c#,queue,C#,Queue,受此启发,, 我制作了一个FixedSizeQueue,当它达到配置的大小时将清空它自己。它将在当时触发一个事件 public new void Enqueue( T obj ) { base.Enqueue( obj ); lock ( syncObject ) { if ( base.Count > Size ) { for ( int i = 0; i < Size; i++ )

受此启发,, 我制作了一个FixedSizeQueue,当它达到配置的大小时将清空它自己。它将在当时触发一个事件

public new void Enqueue( T obj )
{
    base.Enqueue( obj );
    lock ( syncObject )
    {
        if ( base.Count > Size )
        {
            for ( int i = 0; i < Size; i++ )
            {
                T outObj;
                base.TryDequeue( out outObj );
                ItemsList.Add( outObj );
            }
            OnExportItems( new ExportEventArgs<T>( ItemsList ) );
            ResetItemsList();
        }
    }
}
public new void Enqueue(T obj)
{
基本排队(obj);
锁定(同步对象)
{
如果(基本计数>大小)
{
对于(int i=0;i
这个很好用

但有一种情况是,排队的项目数小于队列的大小

在这种情况下,我应该如何刷新队列?
每x毫秒检查一次队列并触发清空的计时器?

queue.Clear()
方法?是什么防止事件处理程序导致死锁?(提示:这是运气。)我不知道为什么代码这么复杂。我只是使用一个列表对象和RemoveAt(0)方法;知道。我的建议是,在理解基本知识之前,不要编写多线程代码。锁如何防止死锁?假设线程A获得了队列Q上的锁,我们将上下文切换到线程B,线程B执行操作X;X接受监视器M,然后尝试排队,所以线程B阻塞Q。现在我们切换回调用任意事件处理程序的线程A。任意事件处理程序可以执行任何操作,包括操作X。它阻止了获取M的尝试。现在我们在M上阻塞了线程A,在Q上阻塞了线程B,并且无法在任一线程上取得进展。除了运气之外,还有什么能阻止这种情况在你的程序中发生?