11using System ;
2+ using System . Collections . Generic ;
23using System . Text ;
34using Avalonia . Threading ;
45using CommunityToolkit . Mvvm . ComponentModel ;
@@ -43,10 +44,14 @@ public CommandLog(string name)
4344 Name = name ;
4445 }
4546
46- public void Register ( Action < string > handler )
47+ public void Subscribe ( Models . ICommandLogReceiver receiver )
4748 {
48- if ( ! IsComplete )
49- _onNewLineReceived += handler ;
49+ _receivers . Add ( receiver ) ;
50+ }
51+
52+ public void Unsubscribe ( Models . ICommandLogReceiver receiver )
53+ {
54+ _receivers . Remove ( receiver ) ;
5055 }
5156
5257 public void AppendLine ( string line = null )
@@ -59,7 +64,9 @@ public void AppendLine(string line = null)
5964 {
6065 var newline = line ?? string . Empty ;
6166 _builder . AppendLine ( newline ) ;
62- _onNewLineReceived ? . Invoke ( newline ) ;
67+
68+ foreach ( var receiver in _receivers )
69+ receiver . OnReceiveCommandLog ( newline ) ;
6370 }
6471 }
6572
@@ -76,20 +83,14 @@ public void Complete()
7683
7784 _content = _builder . ToString ( ) ;
7885 _builder . Clear ( ) ;
86+ _receivers . Clear ( ) ;
7987 _builder = null ;
8088
8189 OnPropertyChanged ( nameof ( IsComplete ) ) ;
82-
83- if ( _onNewLineReceived != null )
84- {
85- var dumpHandlers = _onNewLineReceived . GetInvocationList ( ) ;
86- foreach ( var d in dumpHandlers )
87- _onNewLineReceived -= ( Action < string > ) d ;
88- }
8990 }
9091
9192 private string _content = string . Empty ;
9293 private StringBuilder _builder = new StringBuilder ( ) ;
93- private event Action < string > _onNewLineReceived ;
94+ private List < Models . ICommandLogReceiver > _receivers = new List < Models . ICommandLogReceiver > ( ) ;
9495 }
9596}
0 commit comments