Browse Source

Using Queues to Improve Message Display

pull/5636/head
2dust 3 months ago
parent
commit
6879c75bc8
  1. 4
      v2rayN/v2rayN.Desktop/Views/MsgView.axaml
  2. 23
      v2rayN/v2rayN.Desktop/Views/MsgView.axaml.cs
  3. 16
      v2rayN/v2rayN/Views/MsgView.xaml.cs

4
v2rayN/v2rayN.Desktop/Views/MsgView.axaml

@ -66,14 +66,12 @@
<TextBlock
Margin="8,0"
VerticalAlignment="Center"
IsVisible="False"
Text="{x:Static resx:ResUI.TbAutoScrollToEnd}" />
<ToggleSwitch
x:Name="togScrollToEnd"
Margin="8,0"
HorizontalAlignment="Left"
IsChecked="True"
IsVisible="False" />
IsChecked="True" />
</WrapPanel>
<TextBox
Name="txtMsg"

23
v2rayN/v2rayN.Desktop/Views/MsgView.axaml.cs

@ -11,10 +11,11 @@ namespace v2rayN.Desktop.Views
public partial class MsgView : UserControl
{
private static Config? _config;
private ConcurrentQueue<string> _queueMsg = new();
private int _numMaxMsg = 500;
private string lastMsgFilter = string.Empty;
private bool lastMsgFilterNotAvailable;
private ConcurrentBag<string> _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();
}

16
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<string> _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();
}

Loading…
Cancel
Save