取消异步任务?

slickchick2

我的代码没有正确取消任务,我仍然看到我的图表中的系列正在为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);
        }
    }

    private void InitiateTimerWithButtonUIChange(DispatcherTimer timer, Button buttonSelected, bool isFinished)
    {
        if (!isFinished)
        {
            timer.Start();
            buttonSelected.Background = resourceDictionary["Processing"] as Brush;
        }
        else
        {
            timer.Stop();
            buttonSelected.Background = resourceDictionary["ColourActive"] as Brush;

            // Reset
            time = 0;
        }
    }
毫米8

尝试调用用于创建传递给的令牌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);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

春天取消@异步任务

来自分类Dev

异步取消任务

来自分类Dev

使用异步任务取消任务

来自分类Dev

通过按钮取消异步任务

来自分类Dev

在Android中取消异步任务

来自分类Dev

通过按钮取消异步任务

来自分类Dev

C#异步任务取消

来自分类Dev

取消 WebClient 下载任务异步

来自分类Dev

Android-Loopj异步任务取消

来自分类Dev

单击按钮后无法取消异步任务

来自分类Dev

在ReactiveUI ViewModel(ReactiveObject)中取消异步任务

来自分类Dev

异步任务取消C#Xamarin

来自分类Dev

取消所有异步任务

来自分类Dev

如何从客户端取消异步任务

来自分类Dev

如何使用标签主机取消异步任务

来自分类Dev

Android-Loopj异步任务取消

来自分类Dev

在ReactiveUI ViewModel(ReactiveObject)中取消异步任务

来自分类Dev

使用 CancellationTokenSource 取消之前的异步任务

来自分类Dev

取消的异步任务导致“任务已销毁,但未决”

来自分类Dev

在Swift中触摸屏幕时取消的异步任务

来自分类Dev

如果正在运行,则取消异步任务

来自分类Dev

如何-具有超时和取消功能的多个异步任务

来自分类Dev

如何取消活动中按回的异步任务

来自分类Dev

不确定如何取消长时间运行的异步任务

来自分类Dev

C#5 .NET MVC长异步任务,进度报告和全局取消

来自分类Dev

显示IProgress并支持取消WinForms异步任务的模式进度表单

来自分类Dev

Windows Phone 8,需要在返回键上取消异步任务

来自分类Dev

如何在超时的情况下取消龙卷风中悬挂的异步任务?

来自分类Dev

如何在useEffect清理功能中取消所有订阅和异步任务?