1
1
using System ;
2
+ using System . Collections . Generic ;
2
3
using System . Text ;
3
4
using Avalonia . Threading ;
4
5
using CommunityToolkit . Mvvm . ComponentModel ;
@@ -43,10 +44,14 @@ public CommandLog(string name)
43
44
Name = name ;
44
45
}
45
46
46
- public void Register ( Action < string > handler )
47
+ public void Subscribe ( Models . ICommandLogReceiver receiver )
47
48
{
48
- if ( ! IsComplete )
49
- _onNewLineReceived += handler ;
49
+ _receivers . Add ( receiver ) ;
50
+ }
51
+
52
+ public void Unsubscribe ( Models . ICommandLogReceiver receiver )
53
+ {
54
+ _receivers . Remove ( receiver ) ;
50
55
}
51
56
52
57
public void AppendLine ( string line = null )
@@ -59,7 +64,9 @@ public void AppendLine(string line = null)
59
64
{
60
65
var newline = line ?? string . Empty ;
61
66
_builder . AppendLine ( newline ) ;
62
- _onNewLineReceived ? . Invoke ( newline ) ;
67
+
68
+ foreach ( var receiver in _receivers )
69
+ receiver . OnReceiveCommandLog ( newline ) ;
63
70
}
64
71
}
65
72
@@ -76,20 +83,14 @@ public void Complete()
76
83
77
84
_content = _builder . ToString ( ) ;
78
85
_builder . Clear ( ) ;
86
+ _receivers . Clear ( ) ;
79
87
_builder = null ;
80
88
81
89
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
- }
89
90
}
90
91
91
92
private string _content = string . Empty ;
92
93
private StringBuilder _builder = new StringBuilder ( ) ;
93
- private event Action < string > _onNewLineReceived ;
94
+ private List < Models . ICommandLogReceiver > _receivers = new List < Models . ICommandLogReceiver > ( ) ;
94
95
}
95
96
}
0 commit comments