Как замедлить добавление элементов в коллекцию?

У меня есть список, в который постоянно добавляются элементы. Мой код:

public Task HandleApplicationMessageReceivedAsync( MqttApplicationMessageReceivedEventArgs eventArgs )           
{                                                                                                                
    return Dispatcher.UIThread.InvokeAsync( () =>                                                                
    {                                                                                                            
        if ( !IsRecordingEnabled ) return;                                                                       
        if ( ReceivedApplicationMessages.Count >= 10000 )                                                        
        {                                                                                                        
            ReceivedApplicationMessages.RemoveRange( 9999, ReceivedApplicationMessages.Count - 9999 );           
        }                                                                                                        
                                                                                                                 
        if ( FilterEditorViewModel.MarkedFields                                                                   
            .Any( x => eventArgs.ApplicationMessage.Topic                                                        
                .ToUpper()                                                                                       
                .Contains( x.ToUpper() ) ) )                                                                     
            return;                                                                                              
                                                                                                                 
        ReceivedApplicationMessages.Insert( 0, new ReceivedApplicationMessageViewModel(                          
            _messageId++, eventArgs.ApplicationMessage ) );                                                      
    } );                                                                                                          
}    

Проблема в том, что добавляются они очень быстро, нет возможности вообще заметить что-то. Какая-то реактивная коллекция получилась. Пробовал добавлять раз в 1000мс, но получается рывками, что совсем не здорово:

var timer = new Timer( 1000 ) { AutoReset = false };
timer.Elapsed += ( sender, args ) => ChunkMessages();
NewMessageArrived += ( sender, args ) => { if ( !timer.Enabled ) timer.Start(); }; 


public Task HandleApplicationMessageReceivedAsync( MqttApplicationMessageReceivedEventArgs eventArgs )
{
    return Dispatcher.UIThread.InvokeAsync( () =>
    {
         if ( ReceivedApplicationMessages.Count >= 10000 )
         {
              ReceivedApplicationMessages.RemoveRange( 9999, ReceivedApplicationMessages.Count - 9999 );
         }

         if ( FilterEditorViewModel.MarkedFields
               .Any( x => eventArgs.ApplicationMessage.Topic
               .ToUpper()
               .Contains( x.ToUpper() ) ) )
             return;
                
         ReceivedApplicationMessagesChunk.Insert( 0, new ReceivedApplicationMessageViewModel(
                    _messageId++,
                    eventArgs.ApplicationMessage ) );

         NewMessageArrived?.Invoke( null, EventArgs.Empty );
            } );
        }
          

private void ChunkMessages()
{
     if ( !IsRecordingEnabled ) return;
     ReceivedApplicationMessages.InsertRange( 0, ReceivedApplicationMessagesChunk );
     ReceivedApplicationMessagesChunk.Clear();
}    

Ответы (0 шт):