@@ -168,62 +168,68 @@ private async Task Timeout()
168168 }
169169 }
170170
171- private async Task OnStart ( TimeSpan val )
171+ private Task OnStart ( TimeSpan val )
172172 {
173173 Value = val ;
174174 IsPause = false ;
175175 CurrentTimespan = Value ;
176176 AlertTime = DateTime . Now . Add ( CurrentTimespan ) . ToString ( "HH:mm:ss" ) ;
177177
178178 StateHasChanged ( ) ;
179- await Task . Yield ( ) ;
180179
181- // 点击 Cancel 后重新设置再点击 Star
182- if ( CancelTokenSource . IsCancellationRequested )
180+ _ = Task . Run ( async ( ) =>
183181 {
184- CancelTokenSource . Dispose ( ) ;
185- CancelTokenSource = new CancellationTokenSource ( ) ;
186- }
187-
188- while ( ! CancelTokenSource . IsCancellationRequested && CurrentTimespan > TimeSpan . Zero )
189- {
190- try
182+ // 点击 Cancel 后重新设置再点击 Star
183+ if ( CancelTokenSource . IsCancellationRequested )
191184 {
192- await Task . Delay ( 1000 , CancelTokenSource . Token ) ;
185+ CancelTokenSource . Dispose ( ) ;
186+ CancelTokenSource = new CancellationTokenSource ( ) ;
193187 }
194- catch ( TaskCanceledException ) { }
195188
196- if ( ! CancelTokenSource . IsCancellationRequested )
189+ while ( ! CancelTokenSource . IsCancellationRequested && CurrentTimespan > TimeSpan . Zero )
197190 {
198- CurrentTimespan = CurrentTimespan . Subtract ( TimeSpan . FromSeconds ( 1 ) ) ;
199- StateHasChanged ( ) ;
200- }
191+ try
192+ {
193+ await Task . Delay ( 1000 , CancelTokenSource . Token ) ;
194+ }
195+ catch ( TaskCanceledException ) { }
201196
202- if ( IsPause )
203- {
204- ResetEvent . WaitOne ( ) ;
205- AlertTime = DateTime . Now . Add ( CurrentTimespan ) . ToString ( "HH:mm:ss" ) ;
197+ if ( ! CancelTokenSource . IsCancellationRequested )
198+ {
199+ CurrentTimespan = CurrentTimespan . Subtract ( TimeSpan . FromSeconds ( 1 ) ) ;
200+ await InvokeAsync ( StateHasChanged ) ;
201+ }
206202
207- // 重建 CancelToken
208- CancelTokenSource . Dispose ( ) ;
209- CancelTokenSource = new CancellationTokenSource ( ) ;
203+ if ( IsPause )
204+ {
205+ ResetEvent . WaitOne ( ) ;
206+ AlertTime = DateTime . Now . Add ( CurrentTimespan ) . ToString ( "HH:mm:ss" ) ;
207+
208+ // 重建 CancelToken
209+ CancelTokenSource . Dispose ( ) ;
210+ CancelTokenSource = new CancellationTokenSource ( ) ;
211+ }
210212 }
211- }
212213
213- if ( CurrentTimespan == TimeSpan . Zero )
214- {
215- await Task . Delay ( 500 , CancelTokenSource . Token ) ;
216- if ( ! CancelTokenSource . IsCancellationRequested )
214+ if ( CurrentTimespan == TimeSpan . Zero )
217215 {
218- Value = TimeSpan . Zero ;
219- Vibrate = IsVibrate ;
220- StateHasChanged ( ) ;
221- if ( OnTimeout != null )
216+ await Task . Delay ( 500 , CancelTokenSource . Token ) ;
217+ if ( ! CancelTokenSource . IsCancellationRequested )
222218 {
223- await OnTimeout ( ) ;
219+ Value = TimeSpan . Zero ;
220+ await InvokeAsync ( async ( ) =>
221+ {
222+ Vibrate = IsVibrate ;
223+ StateHasChanged ( ) ;
224+ if ( OnTimeout != null )
225+ {
226+ await OnTimeout ( ) ;
227+ }
228+ } ) ;
224229 }
225230 }
226- }
231+ } ) ;
232+ return Task . CompletedTask ;
227233 }
228234
229235 private void OnClickPause ( )
0 commit comments