[英]A task was canceled
我正在執行任務。 關閉窗口時,我正在嘗試使用取消令牌源來取消任務。 每次關閉窗口時都不會發生此錯誤。 只是有時。 請看看我收到的錯誤
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();
}
在運行代碼時,請檢查取消是否在掛起之前和之后以及之間。 這樣,如果在操作過程中取消了下一個Dispatcher函數,則不會執行它。
while (true)
{
if (dotIndicatorTokenSource.IsCancellationRequested)
{
break;
}
Dispatcher.Invoke(() =>
{
connectionIndicatorDotImg.Visibility = Visibility.Hidden;
});
Thread.Sleep(halfPeriod);
if (dotIndicatorTokenSource.IsCancellationRequested)
{
break;
}
Dispatcher.Invoke(() =>
{
connectionIndicatorDotImg.Visibility = Visibility.Visible;
});
Thread.Sleep(halfPeriod);
if (dotIndicatorTokenSource.IsCancellationRequested)
{
break;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.