@@ -53,30 +53,34 @@ private void Control_OnLoaded(object? sender, RoutedEventArgs e)
53
53
{
54
54
if ( _dataChanged )
55
55
{
56
+ _dataChanged = false ; // 重置标记
57
+ var tempLines = new List < List < TerminalBlock > > ( ) ;
56
58
lock ( _terminalBlocks )
57
59
{
58
- // 执行更新逻辑
59
- //清空文本
60
- MainTextBlock . Inlines ! . Clear ( ) ;
61
- foreach ( var line in _terminalBlocks )
60
+ //克隆数据
61
+ tempLines . AddRange ( CloneAllLines ( _terminalBlocks ) ) ;
62
+ }
63
+
64
+ // 执行更新逻辑
65
+ //清空文本
66
+ MainTextBlock . Inlines ! . Clear ( ) ;
67
+ foreach ( var line in tempLines )
68
+ {
69
+ foreach ( var block in line )
62
70
{
63
- foreach ( var block in line )
71
+ //添加块
72
+ var run = new Run ( block . Text )
64
73
{
65
- //添加块
66
- var run = new Run ( block . Text )
67
- {
68
- [ ! Span . ForegroundProperty ] = new Binding ( block . ForegroundBindingName ) { Source = Utils . Setting } ,
69
- [ ! Span . BackgroundProperty ] = new Binding ( block . BackgroundBindingName ) { Source = Utils . Setting } ,
70
- FontWeight = block . IsBold ? FontWeight . Bold : FontWeight . Normal ,
71
- FontStyle = block . IsItalic ? FontStyle . Italic : FontStyle . Normal ,
72
- TextDecorations = block . IsUnderLine ? TextDecorations . Underline : null ,
73
- } ;
74
- MainTextBlock . Inlines . Add ( run ) ;
75
- }
76
- MainTextBlock . Inlines . Add ( new LineBreak ( ) ) ;
74
+ [ ! Span . ForegroundProperty ] = new Binding ( block . ForegroundBindingName ) { Source = Utils . Setting } ,
75
+ [ ! Span . BackgroundProperty ] = new Binding ( block . BackgroundBindingName ) { Source = Utils . Setting } ,
76
+ FontWeight = block . IsBold ? FontWeight . Bold : FontWeight . Normal ,
77
+ FontStyle = block . IsItalic ? FontStyle . Italic : FontStyle . Normal ,
78
+ TextDecorations = block . IsUnderLine ? TextDecorations . Underline : null ,
79
+ } ;
80
+ MainTextBlock . Inlines . Add ( run ) ;
77
81
}
82
+ MainTextBlock . Inlines . Add ( new LineBreak ( ) ) ;
78
83
}
79
- _dataChanged = false ; // 重置标记
80
84
}
81
85
} ;
82
86
_updateTimer . Start ( ) ;
@@ -125,16 +129,24 @@ private void TerminalChangedEvent(object? sender, List<List<TerminalBlock>> e)
125
129
lock ( _terminalBlocks )
126
130
{
127
131
_terminalBlocks . Clear ( ) ;
128
- foreach ( var line in e )
132
+ //克隆数据
133
+ _terminalBlocks . AddRange ( CloneAllLines ( e ) ) ;
134
+ }
135
+ _dataChanged = true ;
136
+ }
137
+
138
+ private List < List < TerminalBlock > > CloneAllLines ( List < List < TerminalBlock > > lines )
139
+ {
140
+ var newLines = new List < List < TerminalBlock > > ( ) ;
141
+ foreach ( var line in lines )
142
+ {
143
+ var newLine = new List < TerminalBlock > ( ) ;
144
+ foreach ( var block in line )
129
145
{
130
- var newLine = new List < TerminalBlock > ( ) ;
131
- foreach ( var block in line )
132
- {
133
- newLine . Add ( ( TerminalBlock ) block . Clone ( ) ) ;
134
- }
135
- _terminalBlocks . Add ( newLine ) ;
146
+ newLine . Add ( ( TerminalBlock ) block . Clone ( ) ) ;
136
147
}
148
+ newLines . Add ( newLine ) ;
137
149
}
138
- _dataChanged = true ;
150
+ return newLines ;
139
151
}
140
152
}
0 commit comments