原文:WPF 精修篇 长时间线程加取消功能


  1. <Grid>
  2. <Grid.RowDefinitions>
  3. <RowDefinition Height="11*"/>
  4. <RowDefinition Height="29*"/>
  5. </Grid.RowDefinitions>
  6. <StackPanel Orientation="Horizontal" Margin="0" VerticalAlignment="Center">
  7. <Label>开始数据</Label>
  8. <TextBox x:Name="beginText" HorizontalAlignment="Left" Height="31" TextWrapping="Wrap" Text="100" VerticalAlignment="Top" Width="100"/>
  9. <Label>结束数据</Label>
  10. <TextBox x:Name="endText" HorizontalAlignment="Left" Height="31" TextWrapping="Wrap" Text="1000000000" VerticalAlignment="Top" Width="100"/>
  11. <Button x:Name="button" Content="开始" HorizontalAlignment="Center" VerticalAlignment="Center" Width="75" Click="Button_Click"/>
  12. <Button x:Name="Cancel" Content="取消" HorizontalAlignment="Center" VerticalAlignment="Center" Width="75" Click="Cancel_Click"/>
  13. </StackPanel>
  14. <StackPanel Margin="0" Grid.Row="1">
  15. <TextBlock x:Name="odd" TextWrapping="Wrap" Text="奇数数量:"/>
  16. <TextBlock x:Name="even" TextWrapping="Wrap" Text="偶数数量:"/>
  17. </StackPanel>
  18. </Grid>

  1. private int oddcount =0;
  2. private int evencount =0;
  3. public void Make(int from ,int to)
  4. {
  5. for (int i = from; i < to; i++)
  6. {
  7. if (TokenSource.IsCancellationRequested)
  8. {
  9. evencount = -1;
  10. oddcount = -1;
  11. return;
  12. }
  13. if (i % 2 == 0)
  14. {
  15. evencount++;
  16. }
  17. else
  18. {
  19. oddcount++;
  20. }
  21. }
  22. }
  23. private void Button_Click(object sender, RoutedEventArgs e)
  24. {
  25. int from=0;
  26. int to = 0;
  27. if(int.TryParse(beginText.Text,out from)&&int.TryParse(endText.Text,out to) )
  28. {
  29. button.IsEnabled = false;
  30. ThreadPool.QueueUserWorkItem(_ =>
  31. {
  32. TokenSource = new CancellationTokenSource();
  33. Make(from, to);
  34. Dispatcher.BeginInvoke(new Action(() =>
  35. {
  36. if (oddcount < 0 || evencount < 0)
  37. {
  38. odd.Text = "操作取消";
  39. even.Text = "操作取消";
  40. }
  41. else
  42. {
  43. odd.Text = "奇数数量:" + oddcount;
  44. even.Text = "偶数数量:" + evencount;
  45. }
  46. button.IsEnabled = true;
  47. }));
  48. });
  49. }
  50. }
  51. public CancellationTokenSource TokenSource = null;
  52. private void Cancel_Click(object sender, RoutedEventArgs e)
  53. {
  54. if (TokenSource != null)
  55. {
  56. TokenSource.Cancel();
  57. TokenSource = null;
  58. }
  59. }

WPF 精修篇 长时间线程加取消功能的更多相关文章

  1. WPF 精修篇 page

    原文:WPF 精修篇 page 前言 前段时间看UML 大象 这本书 虽然马上看到了精华片 最后还是暂时暂停 因为这本书 很好 但是暂时对现在的我来说 有点超前 很多东西理解起来还是很难 但是 这本书 ...

  2. WPF 精修篇 WPF嵌入Winfrom控件

    原文:WPF 精修篇 WPF嵌入Winfrom控件 先增加DLL 支持 使用  WindowsFormsHost 来加载Forms的控件 引用命名空间 xmlns:forms="clr-na ...

  3. WPF 精修篇 BackgroundWorker

    原文:WPF 精修篇 BackgroundWorker 效果 <Grid> <Grid.RowDefinitions> <RowDefinition Height=&qu ...

  4. WPF 精修篇 非UI进程后台更新UI进程

    原文:WPF 精修篇 非UI进程后台更新UI进程 <Grid> <Grid.RowDefinitions> <RowDefinition Height="11* ...

  5. WPF 精修篇 多属性触发器

    原文:WPF 精修篇 多属性触发器 多属性触发器就是多个属性都满足在触发 在属性触发器上加了一些逻辑判断 举栗子 这个栗子里  textBox 要满足俩个条件 才能触发背景变色 1)textbox的 ...

  6. WPF 精修篇 数据触发器

    原文:WPF 精修篇 数据触发器 数据触发器 可以使用Binding 来绑定控件 或者数据源 来触发相关动作 举栗子 <Window.Resources> <Style Target ...

  7. WPF 精修篇 属性触发器

    原文:WPF 精修篇 属性触发器 属性触发器是通过  某个条件触发改变属性 通过无代码实现功能 <Style TargetType="{x:Type Label}"> ...

  8. WPF 精修篇 样式继承

    原文:WPF 精修篇 样式继承 这个 是新知识 样式可以继承 <Style x:Key="TextBlockStyleBase" TargetType="{x:Ty ...

  9. WPF 精修篇 自定义控件

    原文:WPF 精修篇 自定义控件 自定义控件 因为没有办法对界面可视化编辑 所以用来很少 现在实现的是 自定义控件的 自定义属性 和自定义方法 用VS 创建自定义控件后 会自动创建 Themes 文件 ...

随机推荐

  1. GCN python 实现2:利用GCN进行节点分类

    参考:https://www.baidu.com/link?url=5oU-O_YQV8DdSTtRkgzsQ_vuwjJHyUOxqeAKhq98ZA5XtvKW8PNQwXgSlr5GpESRqh ...

  2. Centos7 安装使用virtualenvwrapper

    退出所有的虚拟环境,在物理环境下安装 1.下载安装virtualenvwrapper pip3 install virtualenvwrapper 2.查看python3的文件和virtualenvw ...

  3. 十六、MySQL授权命令grant的使用方法

    MySQL 赋予用户权限命令的简单格式可概括为: grant 权限 on 数据库对象 to 用户 一.grant 普通数据用户,查询.插入.更新.删除 数据库中所有表数据的权利. grant sele ...

  4. LearnOpenGL.PBR.光照

    光源辐射率:      辐射率(radiance)表示光源在给定立体角ω下的辐射通量(或光源发射的能量).     那么假设立体角ω无限小时,辐射率就表示单束光线(或说某个单一方向)的辐射通量. 点光 ...

  5. E07【餐厅】What would you recommend?

    核心句型 What would you recommend? 你有什么推荐吗? 场景对话: A:What do  you  want  to  eat? 你想吃点什么? B:I don't know. ...

  6. 201871010109-胡欢欢《面向对象程序设计(java)》第6-7周学习总结

    实验六 继承定义与使用 实验时间 2019-9-29 第一部分:理论部分. 1.继承:已有类来构建新类的一种机制.档定义了一个新类继承另一个类时,这个新类就继承了这个类的方法和域,同时在新类中添加新的 ...

  7. Appium+python自动化(三)- SDK Manager(超详解)

    简介 本来宏哥一开始打算用真机做的,所以在前边搭建环境时候就没有下载SDK,但是由于许多小伙伴通过博客发短消息给宏哥留言说是没有真机,所以顺应民意整理一下模拟器,毕竟“得民心者,得天下”.SDK顾名思 ...

  8. Ubuntu16.04安装flume

    参考:https://www.cnblogs.com/soyo/p/7686702.html

  9. ISerializable接口

    继承ISerializable接口可以灵活控制序列化过程 格式化器的工作流程:格式化器再序列化一个对象的时候,发现对象继承了ISerializable接口,那它就会忽略掉类型所有的序列化特性,转而调用 ...

  10. 【oracle】表说明 COMMENT ON的用法