为了账号安全,请及时绑定邮箱和手机立即绑定

为什么如果我尝试使用 CancellationToken.Cancel() 停止任务

为什么如果我尝试使用 CancellationToken.Cancel() 停止任务

C#
宝慕林4294392 2021-09-19 16:51:17
我正在尝试按照我的 MSDN 提供的示例在 C# 中实现任务取消。我有一个带有图形的 Windows 窗体应用程序,显示来自外部设备的数据和一个开始/停止按钮。这或多或少是按钮内的代码:if (drawGraph_task == null){    cts = new System.Threading.CancellationTokenSource();    token = cts.Token;    drawGraph_task = new Task(() =>     {        this.Invoke(new InvokeDelegate(this.myChart.Series[0].Points.Clear));        while (true)        {            // get x and y from device using external lib            this.Invoke(new addPointXYDelegate(this.myChart.Series[0].Points.AddXY), new object[] { x, y });            this.Invoke(new InvokeDelegate(this.chart_pressure.Update)); // update graph            if (token.IsCancellationRequested)            {                return;            }        }    }, token);    this.button_main_start.Text = "Stop";    drawGraph_task.Start();                }else{    cts.Cancel();    try    {        drawGraph_task.Wait();    }    catch (AggregateException ae)    {        // do nothing    }    finally    {        cts.Dispose();        drawGraph_task.Dispose();        drawGraph_task = null;        this.button_main_start.Text = "Restart";    }}为什么代码仍然停留在 drawGraph_task.Wait() 调用中?我试图在任务中使用 token.throwIfCancellationRequested() ,但有时我有同样的效果,有时我的捕获没有捕获异常。我究竟做错了什么?为完整起见,x 和 y 的计算涉及:MathNet 插值库调用内部制作的库进行特定于协议的通信以等待事件(它总是被启动,所以这不是问题的根源)
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 254 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信