我的代码没有正确取消任务,我仍然看到我的图表中的系列正在为循环中的下一个系列绘制foreach...不确定我在这里做错了什么,因为我想退出并取消所有异步此时的任务...有什么想法吗? private void StartTest_Click(object sender, RoutedEventArgs e) { var cancellationTokenSource = new CancellationTokenSource(); if (_isRunning) { cancellationTokenSource.Cancel(); } _isRunning = !_isRunning; Start(cancellationTokenSource.Token); } private async void Start(CancellationToken cancellationToken) { foreach (var buttonSelected in selectedButtons) { // If cancellation requested if (cancellationToken.IsCancellationRequested) break; // Retrieve series to reflect changes on var seriesToChange = Model.Series.Where(x => x.Title == buttonSelected.Name).ToArray(); // Create timer var timerForPlotting = new DispatcherTimer(); if (seriesToChange .Length == 1) { // Set the series to visible seriesToChange [0].IsVisible = true; timerForPlotting.Interval = TimeSpan.FromMilliseconds(50); timerForPlotting.Tick += (object s, EventArgs a) => PlotSeriesPoints_Tick(s, a, seriesToChange [0]); } // Start InitiateTimerWithButtonUIChange(timerForPlotting, buttonSelected, false); // Set the task to only take a couple of seconds await Task.Delay(2000); // End InitiateTimerWithButtonUIChange(timerForPlotting, buttonSelected, true); } }
1 回答
MM们
TA贡献1886条经验 获得超2个赞
尝试调用您用来创建传递给的令牌的Cancel()实际内容:CancellationTokenSourceStart
CancellationTokenSource cancellationTokenSource;
private void StartTest_Click(object sender, RoutedEventArgs e)
{
if (cancellationTokenSource != null)
{
cancellationTokenSource.Cancel();
cancellationTokenSource.Dispose();
}
cancellationTokenSource = new CancellationTokenSource();
_isRunning = !_isRunning;
Start(cancellationTokenSource.Token);
}
- 1 回答
- 0 关注
- 115 浏览
添加回答
举报
0/150
提交
取消