using System;
using System.Threading;
using System.Threading.Tasks;
using System.Windows; namespace WpfApp2
{
public partial class MainWindow : Window
{
CancellationTokenSource Cts = new CancellationTokenSource();
public MainWindow()
{
Person p = new Person();
p.Do(Cts.Token, new Progress<int>((xpp)=>label.Content=xpp));
} /// <summary>
/// 按钮按下事件处理函数
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Button_Click(object sender, RoutedEventArgs e)
{
Cts.Cancel();
}
} public class Person
{
public string name { get; set; }
public string age { get; set; }
public int length { get; set; }
public void Do(CancellationToken token, IProgress<int> progress)
{
Action action = new Action(() =>
{
try
{
for (int i = 0; i < 30; i++)
{
Thread.Sleep(1000);
//报告进度
progress.Report(i);
//如果用户执行CancellationTokenSource.Cancel()方法就抛出异常
//从而达到取消线程操作
token.ThrowIfCancellationRequested();
}
}
catch (Exception)
{
Console.WriteLine("取消线程执行");
}
}); Task task = new Task(action,token);
task.Start();
}
}
}



这里有一点需要说明,那就是Progress实际上是跨线程修改控件,去system.Progress源码中找到Report的源码中调用了OnReport函数,如下图:

m_synchronizationContext变量是个SynchronizationContext类型,用于线程间通信。

最新文章

  1. 在阿里云中编译Linux4.5.0内核 - Ubuntu内核编译教程
  2. c——I/O Multiplexing笔记
  3. ural One-two, One-two 2
  4. import tf
  5. Eclipse c++头文件问题(未完)
  6. java变量作用域
  7. activiti自定义流程之自定义表单(二):创建表单
  8. poj 1269 Intersecting Lines
  9. UIPickerView实现省 市 区三级联动
  10. ##5.2 Nova计算节点-- openstack pike
  11. C# httpclient获取cookies实现模拟web登录
  12. [poj1279]Art Gallery
  13. 测试修改hosts文件py小工具
  14. numpy中的stack操作:hstack()、vstack()、stack()、dstack()、vsplit()、concatenate()
  15. iOS QRcode识别及相册图片二维码读取识别
  16. Cocos Creator - 入门教程项目 - 博客频道 - CSDN.NET
  17. Structs+Spring+Hibernate快速入门
  18. java包的所有类生成class
  19. COM,SOM, QT, GObject, ObjectiveC
  20. Linq的常见查询

热门文章

  1. Laravel 配置
  2. centos7下面装fastdfs
  3. 【软件工程】Beta冲刺(3/5)
  4. 递推,求至少连续放置三个U的危险组合
  5. Flutter移动电商实战 --(10)使用FlutterSwiper制作轮播效果
  6. WordPress窗体化侧边栏
  7. PCL中有哪些可用的PointT类型(2)
  8. SSM框架—Spring AOP之基于注解的声明式AspectJ(Demo)
  9. js图片预览带进度条
  10. nexus私服库被误删如何恢复