Skip to content

Commit 430216f

Browse files
committed
update: 少复制一次
1 parent b5e05bc commit 430216f

File tree

3 files changed

+30
-39
lines changed

3 files changed

+30
-39
lines changed

llcomNext/LLCOM/Models/TerminalObject.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@ public TerminalObject()
1616
}
1717

1818
//展示画面变化时的事件
19-
public EventHandler<List<List<TerminalBlock>>>? TerminalChangedEvent { get; set; }
19+
public EventHandler? TerminalChangedEvent { get; set; }
2020
private void TerminalChanged()
2121
{
2222
if(TerminalChangedEvent is null)
2323
return;
2424
//触发更新事件
25-
TerminalChangedEvent?.Invoke(this, GetShowLines());
25+
TerminalChangedEvent?.Invoke(this, EventArgs.Empty);
2626
}
2727

2828
//用于存放终端数据的缓存

llcomNext/LLCOM/ViewModels/DataViews/TerminalViewModel.cs

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ public TerminalViewModel(Func<Type, ViewModelBase> getService)
2323

2424
TerminalObject.TerminalChangedEvent += (sender, args) =>
2525
{
26-
if(TerminalChangedEvent == null)
26+
if(TerminalRefreshEvent == null)
2727
return;
2828
//更新数据
29-
TerminalChangedEvent?.Invoke(this, args);
29+
TerminalRefreshEvent?.Invoke(this, args);
3030
};
3131
}
3232

@@ -42,7 +42,7 @@ private async Task Test()
4242
TerminalObject.ChangeStyle(random.Next(30,38),random.Next(30,38));
4343
TerminalObject.ChangePosition(random.Next(0,TerminalObject.WindowWidth), random.Next(0,TerminalObject.WindowHeight));
4444
TerminalObject.AddText([testChars[random.Next(0, testChars.Length)]]);
45-
TerminalChangedEvent?.Invoke(this, TerminalObject.GetShowLines());
45+
TerminalRefreshEvent?.Invoke(this, EventArgs.Empty);
4646
}
4747
await Task.Delay(1);
4848
}
@@ -72,5 +72,24 @@ public void ScrollBarChanged(double value)
7272
TerminalObject.ScrollBarChanged(value);
7373
}
7474
//接管更新事件
75-
public EventHandler<List<List<TerminalBlock>>>? TerminalChangedEvent;
75+
public EventHandler? TerminalRefreshEvent;
76+
77+
public List<List<TerminalBlock>> GetShowLines()
78+
{
79+
lock (TerminalObject)
80+
{
81+
var newLines = new List<List<TerminalBlock>>();
82+
var lines = TerminalObject.GetShowLines();
83+
foreach (var line in lines)
84+
{
85+
var newLine = new List<TerminalBlock>();
86+
foreach (var block in line)
87+
{
88+
newLine.Add((TerminalBlock)block.Clone());
89+
}
90+
newLines.Add(newLine);
91+
}
92+
return newLines;
93+
}
94+
}
7695
}

llcomNext/LLCOM/Views/DataViews/TerminalView.axaml.cs

Lines changed: 5 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ public partial class TerminalView : UserControl
2323
{
2424
private readonly CancellationTokenSource _cts = new CancellationTokenSource();
2525
private readonly EventWaitHandle _dataChangeWaitHandle = new EventWaitHandle(false, EventResetMode.ManualReset);
26-
private readonly List<List<TerminalBlock>> _terminalBlocks = [];
2726

2827
public TerminalView()
2928
{
@@ -38,7 +37,7 @@ protected override void OnUnloaded(RoutedEventArgs e)
3837
base.OnUnloaded(e);
3938
MainArea.PropertyChanged -= MainArea_PropertyChanged;
4039
Utils.Setting.TerminalChangedEvent -= TerminalChangedEvent;
41-
((TerminalViewModel)DataContext!).TerminalChangedEvent -= TerminalChangedEvent;
40+
((TerminalViewModel)DataContext!).TerminalRefreshEvent -= TerminalRefreshEvent;
4241
_cts.Cancel();
4342
_dataChangeWaitHandle.Set();
4443
Debug.WriteLine("TerminalView unloaded.");
@@ -55,17 +54,11 @@ private void Control_OnLoaded(object? sender, RoutedEventArgs e)
5554
_dataChangeWaitHandle.Reset();
5655
if(_cts.Token.IsCancellationRequested)
5756
break;
58-
59-
var tempLines = new List<List<TerminalBlock>>();
60-
lock (_terminalBlocks)
61-
{
62-
//克隆数据
63-
tempLines.AddRange(CloneAllLines(_terminalBlocks));
64-
}
6557

6658
// 执行更新逻辑
6759
Dispatcher.UIThread.Post(() =>
68-
{
60+
{
61+
var tempLines = ((TerminalViewModel)DataContext!).GetShowLines();
6962
//清空文本
7063
MainTextBlock.Inlines!.Clear();
7164
foreach (var line in tempLines)
@@ -91,7 +84,7 @@ private void Control_OnLoaded(object? sender, RoutedEventArgs e)
9184
}).Start();
9285

9386
Utils.Setting.TerminalChangedEvent += TerminalChangedEvent;
94-
((TerminalViewModel)DataContext!).TerminalChangedEvent += TerminalChangedEvent;
87+
((TerminalViewModel)DataContext!).TerminalRefreshEvent += TerminalRefreshEvent;
9588
//加载完触发一次,顺便初始化窗口大小数据
9689
RefreshWindowSize();
9790
}
@@ -129,29 +122,8 @@ private void MainScrollBar_OnScroll(object? sender, ScrollEventArgs e)
129122
((TerminalViewModel)DataContext!).ScrollBarChanged(e.NewValue);
130123
}
131124

132-
private void TerminalChangedEvent(object? sender, List<List<TerminalBlock>> e)
125+
private void TerminalRefreshEvent(object? sender, EventArgs e)
133126
{
134-
lock (_terminalBlocks)
135-
{
136-
_terminalBlocks.Clear();
137-
//克隆数据
138-
_terminalBlocks.AddRange(CloneAllLines(e));
139-
}
140127
_dataChangeWaitHandle.Set();
141128
}
142-
143-
private List<List<TerminalBlock>> CloneAllLines(List<List<TerminalBlock>> lines)
144-
{
145-
var newLines = new List<List<TerminalBlock>>();
146-
foreach (var line in lines)
147-
{
148-
var newLine = new List<TerminalBlock>();
149-
foreach (var block in line)
150-
{
151-
newLine.Add((TerminalBlock)block.Clone());
152-
}
153-
newLines.Add(newLine);
154-
}
155-
return newLines;
156-
}
157129
}

0 commit comments

Comments
 (0)