私は、コードの一部がタイマーの遅れでループ内で実行されるアプリケーションを持っています。私は宣言したアプリケーションの開始時にwhileループで実行される実行中のタイマーを停止するにはどうすればよいですか?
:
public static CancellationTokenSource tokenSource1 = new CancellationTokenSource();
public static bool Timer1Running;
はここでループエリアです:
while (App.runCardTimer && App.TimerSeconds > 0)
{
App.Timer1Running = true;
…
await Task.Delay(1000, App.tokenSource1.Token);
App.TimerSeconds--;
App.Timer1Running = false;
}
私のアプリケーションは、このように画面上のクリックに応答します。
wordGrid.GestureRecognizers.Add(
new TapGestureRecognizer()
{
Command = new Command(() =>
{
App.TimerSeconds = 0;
if (App.tokenSource1 != null && App.Timer1Running)
{
App.tokenSource1.Cancel();
}
})
});
実行時に画面がクリックされると、コードに移動します0 App.tokenSource1.Cancel()
しかし、それはその後停止するようです。
誰かが私が間違っていると思われるアイデアはありますか?私はすぐにコードApp.TimerSeconds--;
に行くと予想していただけで、それが前に停止することを期待していなかった。
しかし、あなたがApp.TimerSeconds = 0設定されていないので、それはApp.TimerSeconds> 0に依存しているので、きっとしばらくは今、もはや、実行していますか? –
'await Task.Delay'はキャンセル時にTaskCanceledExceptionをスローします –
タイマーが必要な場合は、タイマーを使用します。 [ソースコードをチェックする](https://referencesource.microsoft.com/#mscorlib/system/threading/Tasks/Task.cs,5896)、あなたは 'Task.Delay'自体がタイマーを使ってTaskCompletionSourceの完了ステータスを設定します。 –