2
私はタスクを実行しています。私はキャンセルトークンのソースを使用してタスクをキャンセルしようとしているウィンドウを閉じるとき。エラーは、ウィンドウが閉じられるたびに発生しません。時々だけ。私はあなたがコードを実行すると、キャンセルが前と後に保留されているかどうかを確認、との間にタスクがキャンセルされました
private CancellationTokenSource dotIndicatorTokenSource;
private void BlinkDotIndicator()
{
var halfPeriod = 200;
dotIndicatorTokenSource = new CancellationTokenSource();
Task.Factory.StartNew(() =>
{
while (true)
{
Dispatcher.Invoke(() =>
{
connectionIndicatorDotImg.Visibility = Visibility.Hidden;
});
Thread.Sleep(halfPeriod);
Dispatcher.Invoke(() =>
{
connectionIndicatorDotImg.Visibility = Visibility.Visible;
});
Thread.Sleep(halfPeriod);
if (dotIndicatorTokenSource.IsCancellationRequested)
{
break;
}
}
}, dotIndicatorTokenSource.Token);
}
private void Window_Closing(object sender, CancelEventArgs e)
{
if (dotIndicatorTokenSource != null)
dotIndicatorTokenSource.Cancel();
}
ありがとうございます。その論理に従えば、結局のところ、取り消しを確認することが本当に必要なのでしょうか? –
Eh。いいえ?あんまり。しかし、それは眠った後です。それは本当に重要ではありません。なぜ安全でないのかそれは4行のコードです。そして、あなたは次のループに入ることさえありません。 –