У меня есть список, в который постоянно добавляются элементы. Мой код:
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();
}
Пробовал добавлять раз в 1000мс- как именно? – aepot May 13 '22 at 15:14ReceivedApplicationMessages, это все. Это впф, где есть вью с листбоксом, к которому и биндится эта коллекция @aepot – May 13 '22 at 15:26Dispatcher.UIThreadвроде отсутствует в WPF или я что-то попутал. – aepot May 13 '22 at 15:44