Skip to content

Commit d93de98

Browse files
committed
Revert "feat(Timer): remove Task.Run support wpf (#5896)"
This reverts commit eadd595.
1 parent df71110 commit d93de98

File tree

1 file changed

+41
-35
lines changed

1 file changed

+41
-35
lines changed

src/BootstrapBlazor/Components/Timer/Timer.razor.cs

Lines changed: 41 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)