From 6d45efc9e61ac4a35491c4ca93cacc667d0e1587 Mon Sep 17 00:00:00 2001 From: xujie86 <167618598+xujie86@users.noreply.github.com> Date: Thu, 25 Sep 2025 06:56:42 +0800 Subject: [PATCH] Update MsgViewModel.cs --- v2rayN/ServiceLib/ViewModels/MsgViewModel.cs | 28 +++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/v2rayN/ServiceLib/ViewModels/MsgViewModel.cs b/v2rayN/ServiceLib/ViewModels/MsgViewModel.cs index b71c45d2..d1a58ea9 100644 --- a/v2rayN/ServiceLib/ViewModels/MsgViewModel.cs +++ b/v2rayN/ServiceLib/ViewModels/MsgViewModel.cs @@ -10,12 +10,15 @@ namespace ServiceLib.ViewModels; public class MsgViewModel : MyReactiveObject { private readonly ConcurrentQueue _queueMsg = new(); - private readonly int _numMaxMsg = 500; + private readonly int _numMaxMsg = 500; // 仅用于限制队列,不做显示裁剪 private bool _lastMsgFilterNotAvailable; private bool _blLockShow = false; - [Reactive] public string MsgFilter { get; set; } - [Reactive] public bool AutoRefresh { get; set; } + [Reactive] + public string MsgFilter { get; set; } + + [Reactive] + public bool AutoRefresh { get; set; } public MsgViewModel(Func>? updateView) { @@ -35,7 +38,7 @@ public class MsgViewModel : MyReactiveObject private async Task AppendQueueMsg(string msg) { - if (!AutoRefresh) return; + if (AutoRefresh == false) return; await EnqueueQueueMsg(msg); if (_blLockShow || !_config.UiItem.ShowInTaskbar) return; @@ -43,13 +46,15 @@ public class MsgViewModel : MyReactiveObject await Task.Delay(500); - var sb = new StringBuilder(); + var sbDelta = new StringBuilder(); while (_queueMsg.TryDequeue(out var line)) { - sb.Append(line); + sbDelta.Append(line); } - if (sb.Length > 0) - await _updateView?.Invoke(EViewAction.DispatcherShowMsg, sb.ToString()); + + var delta = sbDelta.ToString(); + if (delta.Length > 0) + await _updateView?.Invoke(EViewAction.DispatcherShowMsg, delta); _blLockShow = false; } @@ -69,11 +74,8 @@ public class MsgViewModel : MyReactiveObject } } - if (_queueMsg.Count > _numMaxMsg) - { - for (int k = 0; k < _queueMsg.Count - _numMaxMsg; k++) - _queueMsg.TryDequeue(out _); - } + while (_queueMsg.Count > _numMaxMsg) + _queueMsg.TryDequeue(out _); _queueMsg.Enqueue(msg); if (!msg.EndsWith(Environment.NewLine))