我正在尝试按照我的 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
提交
取消