@@ -29,14 +29,10 @@ public partial class SpeechWave : IDisposable
2929 public Func < Task > ? OnTimeout { get ; set ; }
3030
3131 /// <summary>
32- /// 获得/设置 总时长 默认 60000 毫秒
32+ /// 获得/设置 总时长 默认 60 000 毫秒
3333 /// </summary>
3434 [ Parameter ]
35- public int TotalTime { get ; set ; } = 60000 ;
36-
37- private TimeSpan UsedTimeSpan { get ; set ; }
38-
39- private CancellationTokenSource ? Token { get ; set ; }
35+ public int TotalTime { get ; set ; } = 60 * 1000 ;
4036
4137 private string ? ClassString => CssBuilder . Default ( "speech-wave" )
4238 . AddClass ( "invisible" , ! Show )
@@ -49,71 +45,79 @@ public partial class SpeechWave : IDisposable
4945
5046 private string ? TotalTimeSpanString => $ "{ TimeSpan . FromMilliseconds ( TotalTime ) : mm\\:ss} ";
5147
52- private string ? UsedTimeSpanString => $ "{ UsedTimeSpan : mm\\:ss} ";
48+ private string ? UsedTimeSpanString => $ "{ _usedTimeSpan : mm\\:ss} ";
49+
50+ private bool _run ;
51+ private TimeSpan _usedTimeSpan ;
52+ private CancellationTokenSource ? _token ;
5353
5454 /// <summary>
55- /// OnParametersSet 方法
55+ /// <inheritdoc/>
5656 /// </summary>
57- protected override void OnParametersSet ( )
57+ /// <returns></returns>
58+ protected override async Task OnParametersSetAsync ( )
5859 {
59- base . OnParametersSet ( ) ;
60+
61+ await base . OnParametersSetAsync ( ) ;
6062
6163 if ( Show )
6264 {
63- Run ( ) ;
65+ await Run ( ) ;
6466 }
6567 else
6668 {
67- Cancel ( ) ;
69+ Stop ( ) ;
6870 }
6971 }
7072
71- private bool IsRun { get ; set ; }
73+ private bool IsShow => _token is { IsCancellationRequested : false } ;
7274
73- private void Run ( ) => Task . Run ( async ( ) =>
75+ private async Task Run ( )
7476 {
75- if ( ! IsRun )
77+ if ( ! _run )
7678 {
77- IsRun = true ;
78- UsedTimeSpan = TimeSpan . Zero ;
79- Token ??= new CancellationTokenSource ( ) ;
79+ _run = true ;
80+ _usedTimeSpan = TimeSpan . Zero ;
81+ _token ??= new CancellationTokenSource ( ) ;
8082 while ( IsShow )
8183 {
8284 try
8385 {
84- await Task . Delay ( 1000 , Token . Token ) ;
85- UsedTimeSpan = UsedTimeSpan . Add ( TimeSpan . FromSeconds ( 1 ) ) ;
86- if ( UsedTimeSpan . TotalMilliseconds >= TotalTime )
86+ await Task . Delay ( 1000 , _token . Token ) ;
87+ _usedTimeSpan = _usedTimeSpan . Add ( TimeSpan . FromSeconds ( 1 ) ) ;
88+ if ( _usedTimeSpan . TotalMilliseconds >= TotalTime )
8789 {
8890 Show = false ;
8991 if ( OnTimeout != null )
9092 {
9193 await OnTimeout ( ) ;
9294 }
9395 }
94- await InvokeAsync ( StateHasChanged ) ;
96+
97+ if ( ShowUsedTime || Show == false )
98+ {
99+ StateHasChanged ( ) ;
100+ }
95101 }
96102 catch ( TaskCanceledException )
97103 {
98104 break ;
99105 }
100106 }
101- IsRun = false ;
107+ _run = false ;
102108 }
103- } ) ;
109+ }
104110
105- private void Cancel ( )
111+ private void Stop ( )
106112 {
107- if ( Token != null )
113+ if ( _token != null )
108114 {
109- Token . Cancel ( ) ;
110- Token . Dispose ( ) ;
111- Token = null ;
115+ _token . Cancel ( ) ;
116+ _token . Dispose ( ) ;
117+ _token = null ;
112118 }
113119 }
114120
115- private bool IsShow => Token != null && ! Token . IsCancellationRequested ;
116-
117121 /// <summary>
118122 /// Dispose 方法
119123 /// </summary>
@@ -122,7 +126,7 @@ protected virtual void Dispose(bool disposing)
122126 {
123127 if ( disposing )
124128 {
125- Cancel ( ) ;
129+ Stop ( ) ;
126130 }
127131 }
128132
0 commit comments