diff --git a/v2rayN/v2rayN.Desktop/Views/MsgView.axaml b/v2rayN/v2rayN.Desktop/Views/MsgView.axaml index db33c7e7..7d50fc3b 100644 --- a/v2rayN/v2rayN.Desktop/Views/MsgView.axaml +++ b/v2rayN/v2rayN.Desktop/Views/MsgView.axaml @@ -66,14 +66,12 @@ + IsChecked="True" /> _queueMsg = new(); + private int _numMaxMsg = 500; private string lastMsgFilter = string.Empty; private bool lastMsgFilterNotAvailable; - private ConcurrentBag _lstMsg = []; public MsgView() { @@ -74,30 +75,30 @@ namespace v2rayN.Desktop.Views if (togScrollToEnd.IsChecked ?? true) { + txtMsg.CaretIndex = int.MaxValue; } } private void ShowMsg(string msg) { - if (_lstMsg.Count > 999) + if (_queueMsg.Count > _numMaxMsg) { - ClearMsg(); + for (int k = 0; k < _queueMsg.Count - _numMaxMsg; k++) + { + _queueMsg.TryDequeue(out _); + } } + _queueMsg.Enqueue(msg); if (!msg.EndsWith(Environment.NewLine)) { - _lstMsg.Add(Environment.NewLine); + _queueMsg.Enqueue(Environment.NewLine); } - _lstMsg.Add(msg); - // if (!msg.EndsWith(Environment.NewLine)) - // { - // _lstMsg.Add(Environment.NewLine); - // } - this.txtMsg.Text = string.Join("", _lstMsg); + txtMsg.Text = string.Join("", _queueMsg.ToArray()); } public void ClearMsg() { - _lstMsg.Clear(); + _queueMsg.Clear(); txtMsg.Clear(); } diff --git a/v2rayN/v2rayN/Views/MsgView.xaml.cs b/v2rayN/v2rayN/Views/MsgView.xaml.cs index 21a69735..42bf3f4c 100644 --- a/v2rayN/v2rayN/Views/MsgView.xaml.cs +++ b/v2rayN/v2rayN/Views/MsgView.xaml.cs @@ -1,4 +1,5 @@ using ReactiveUI; +using System.Collections.Concurrent; using System.Reactive.Linq; using System.Text.RegularExpressions; using System.Windows.Threading; @@ -8,6 +9,8 @@ namespace v2rayN.Views public partial class MsgView { private static Config? _config; + private ConcurrentQueue _queueMsg = new(); + private int _numMaxMsg = 500; private string lastMsgFilter = string.Empty; private bool lastMsgFilterNotAvailable; @@ -80,19 +83,24 @@ namespace v2rayN.Views private void ShowMsg(string msg) { - if (txtMsg.LineCount > 999) + if (_queueMsg.Count > _numMaxMsg) { - ClearMsg(); + for (int k = 0; k < _queueMsg.Count - _numMaxMsg; k++) + { + _queueMsg.TryDequeue(out _); + } } - this.txtMsg.AppendText(msg); + _queueMsg.Enqueue(msg); if (!msg.EndsWith(Environment.NewLine)) { - this.txtMsg.AppendText(Environment.NewLine); + _queueMsg.Enqueue(Environment.NewLine); } + txtMsg.Text = string.Join("", _queueMsg.ToArray()); } public void ClearMsg() { + _queueMsg.Clear(); txtMsg.Clear(); }