@@ -23,7 +23,6 @@ public partial class TerminalView : UserControl
23
23
{
24
24
private readonly CancellationTokenSource _cts = new CancellationTokenSource ( ) ;
25
25
private readonly EventWaitHandle _dataChangeWaitHandle = new EventWaitHandle ( false , EventResetMode . ManualReset ) ;
26
- private readonly List < List < TerminalBlock > > _terminalBlocks = [ ] ;
27
26
28
27
public TerminalView ( )
29
28
{
@@ -38,7 +37,7 @@ protected override void OnUnloaded(RoutedEventArgs e)
38
37
base . OnUnloaded ( e ) ;
39
38
MainArea . PropertyChanged -= MainArea_PropertyChanged ;
40
39
Utils . Setting . TerminalChangedEvent -= TerminalChangedEvent ;
41
- ( ( TerminalViewModel ) DataContext ! ) . TerminalChangedEvent -= TerminalChangedEvent ;
40
+ ( ( TerminalViewModel ) DataContext ! ) . TerminalRefreshEvent -= TerminalRefreshEvent ;
42
41
_cts . Cancel ( ) ;
43
42
_dataChangeWaitHandle . Set ( ) ;
44
43
Debug . WriteLine ( "TerminalView unloaded." ) ;
@@ -55,17 +54,11 @@ private void Control_OnLoaded(object? sender, RoutedEventArgs e)
55
54
_dataChangeWaitHandle . Reset ( ) ;
56
55
if ( _cts . Token . IsCancellationRequested )
57
56
break ;
58
-
59
- var tempLines = new List < List < TerminalBlock > > ( ) ;
60
- lock ( _terminalBlocks )
61
- {
62
- //克隆数据
63
- tempLines . AddRange ( CloneAllLines ( _terminalBlocks ) ) ;
64
- }
65
57
66
58
// 执行更新逻辑
67
59
Dispatcher . UIThread . Post ( ( ) =>
68
- {
60
+ {
61
+ var tempLines = ( ( TerminalViewModel ) DataContext ! ) . GetShowLines ( ) ;
69
62
//清空文本
70
63
MainTextBlock . Inlines ! . Clear ( ) ;
71
64
foreach ( var line in tempLines )
@@ -91,7 +84,7 @@ private void Control_OnLoaded(object? sender, RoutedEventArgs e)
91
84
} ) . Start ( ) ;
92
85
93
86
Utils . Setting . TerminalChangedEvent += TerminalChangedEvent ;
94
- ( ( TerminalViewModel ) DataContext ! ) . TerminalChangedEvent += TerminalChangedEvent ;
87
+ ( ( TerminalViewModel ) DataContext ! ) . TerminalRefreshEvent += TerminalRefreshEvent ;
95
88
//加载完触发一次,顺便初始化窗口大小数据
96
89
RefreshWindowSize ( ) ;
97
90
}
@@ -129,29 +122,8 @@ private void MainScrollBar_OnScroll(object? sender, ScrollEventArgs e)
129
122
( ( TerminalViewModel ) DataContext ! ) . ScrollBarChanged ( e . NewValue ) ;
130
123
}
131
124
132
- private void TerminalChangedEvent ( object ? sender , List < List < TerminalBlock > > e )
125
+ private void TerminalRefreshEvent ( object ? sender , EventArgs e )
133
126
{
134
- lock ( _terminalBlocks )
135
- {
136
- _terminalBlocks . Clear ( ) ;
137
- //克隆数据
138
- _terminalBlocks . AddRange ( CloneAllLines ( e ) ) ;
139
- }
140
127
_dataChangeWaitHandle . Set ( ) ;
141
128
}
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
- }
157
129
}
0 commit comments