WPF 精修篇 BackgroundWorker
效果

-
<Grid>
-
<Grid.RowDefinitions>
-
<RowDefinition Height="22*"/>
-
<RowDefinition Height="11*"/>
-
<RowDefinition Height="47*"/>
-
</Grid.RowDefinitions>
-
<StackPanel Orientation="Horizontal" Margin="0,28" VerticalAlignment="Center">
-
<Label>开始数据</Label>
-
<TextBox x:Name="beginText" HorizontalAlignment="Left" Height="31" TextWrapping="Wrap" Text="100" VerticalAlignment="Top" Width="100"/>
-
<Label>结束数据</Label>
-
<TextBox x:Name="endText" HorizontalAlignment="Left" Height="31" TextWrapping="Wrap" Text="1000000000" VerticalAlignment="Top" Width="100"/>
-
<Button x:Name="button" Content="开始" HorizontalAlignment="Center" VerticalAlignment="Center" Width="75" Click="Button_Click"/>
-
<Button x:Name="Cancel" Content="取消" HorizontalAlignment="Center" VerticalAlignment="Center" Width="75" Click="Cancel_Click"/>
-
</StackPanel>
-
<StackPanel Margin="0" Grid.Row="1" Grid.RowSpan="2">
-
<TextBlock x:Name="odd" TextWrapping="Wrap" Text="奇数数量:"/>
-
<TextBlock x:Name="even" TextWrapping="Wrap" Text="偶数数量:"/>
-
<ProgressBar x:Name="Prebar" Height="20"/>
-
</StackPanel>
-
</Grid>
-
private int oddcount =0;
-
private int evencount =0;
-
public void Make(int from ,int to)
-
{
-
oddcount = 0;
-
evencount = 0;
-
int num = (to - from) / 100;
-
for (int i = from; i < to; i++)
-
{
-
if (worker.CancellationPending == true)
-
{
-
return;
-
}
-
-
if (i % 2 == 0)
-
{
-
evencount++;
-
}
-
else
-
{
-
oddcount++;
-
}
-
if (i % num == 0 && (worker != null) && (worker.WorkerReportsProgress = true))
-
{
-
worker.ReportProgress(i / num);
-
}
-
}
-
-
}
-
BackgroundWorker worker = null;
-
private void Button_Click(object sender, RoutedEventArgs e)
-
{
-
int from=0;
-
int to = 0;
-
if(int.TryParse(beginText.Text,out from)&&int.TryParse(endText.Text,out to) )
-
{
-
button.IsEnabled = false;
-
odd.Text = "奇数数量:0" ;
-
even.Text = "偶数数量:0" ;
-
-
worker = new BackgroundWorker();
-
//异步取消 需要增加这个 不然取消失效
-
worker.WorkerSupportsCancellation = true;
-
//支持报告进度
-
worker.WorkerReportsProgress = true;
-
//注册滚动条事件
-
worker.ProgressChanged+=worker_ProgressChanged;
-
-
//注册任务
-
worker.DoWork+=worker_DoWork;
-
//任务完毕触发
-
worker.RunWorkerCompleted += worker_RunWorkerCompleted;
-
//给任务传参
-
worker.RunWorkerAsync(new Tuple<int, int>(from, to));
-
-
}
-
-
}
-
-
private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
-
{
-
Prebar.Value = e.ProgressPercentage;
-
}
-
-
void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
-
{
-
// throw new NotImplementedException();
-
if (sender is BackgroundWorker)
-
{
-
-
if (e.Cancelled == true)
-
{
-
odd.Text = "任务已取消";
-
even.Text = "";
-
}
-
else
-
{
-
odd.Text = "奇数数量:" + oddcount;
-
even.Text = "偶数数量:" + evencount;
-
}
-
BackgroundWorker k = (BackgroundWorker)sender;
-
k.DoWork -= worker_DoWork;
-
k.RunWorkerCompleted -= worker_RunWorkerCompleted;
-
k = null;
-
button.IsEnabled = true;
-
}
-
-
}
-
-
private void worker_DoWork(object sender, DoWorkEventArgs e)
-
{
-
var args = ( Tuple<int, int>)e.Argument;
-
Make(args.Item1, args.Item2);
-
if (worker.CancellationPending == true)
-
{
-
e.Cancel = true;
-
}
-
}
-
-
-
private void Cancel_Click(object sender, RoutedEventArgs e)
-
{
-
-
worker.CancelAsync();
-
}
WPF 精修篇 BackgroundWorker的更多相关文章
- WPF 精修篇 数据触发器
原文:WPF 精修篇 数据触发器 数据触发器 可以使用Binding 来绑定控件 或者数据源 来触发相关动作 举栗子 <Window.Resources> <Style Target ...
- WPF 精修篇 属性触发器
原文:WPF 精修篇 属性触发器 属性触发器是通过 某个条件触发改变属性 通过无代码实现功能 <Style TargetType="{x:Type Label}"> ...
- WPF 精修篇 样式继承
原文:WPF 精修篇 样式继承 这个 是新知识 样式可以继承 <Style x:Key="TextBlockStyleBase" TargetType="{x:Ty ...
- WPF 精修篇 自定义控件
原文:WPF 精修篇 自定义控件 自定义控件 因为没有办法对界面可视化编辑 所以用来很少 现在实现的是 自定义控件的 自定义属性 和自定义方法 用VS 创建自定义控件后 会自动创建 Themes 文件 ...
- WPF 精修篇 用户控件
原文:WPF 精修篇 用户控件 增加用户控件 数据绑定还是用依赖属性 使用的事件 就委托注册一下 public delegate void ButtonClick(object b,EventArgs ...
- WPF 精修篇 DataGrid 筛选
原文:WPF 精修篇 DataGrid 筛选 DataGrid也可以分组 但是用的地方不多 就没写 筛选还是可以的 比如Datagrid数据量比较大 要做数据筛选 贴码 <DataGrid x: ...
- WPF 精修篇 DataGrid 数据源排序
原文:WPF 精修篇 DataGrid 数据源排序 效果 <DataGrid x:Name="datagrid" ItemsSource="{Binding Ele ...
- WPF 精修篇 数据绑定到对象
原文:WPF 精修篇 数据绑定到对象 数据绑定到对象 首先 我们需要一个对象 public class Preson { private string name; public string Name ...
- WPF 精修篇 数据绑定 更新通知
原文:WPF 精修篇 数据绑定 更新通知 开始更新一点有意思的了 首先 数据绑定 其中之一 Element 绑定 看例子 <Window x:Class="WpfApplicatio ...
随机推荐
- OL7.7安装Oracle 11.2.0.4
安装环境准备工具 yum –y install oracle-rdbms-server-11gR2-preinstall 创建目录 mkdir -p /u01/app/oracle/product/1 ...
- Linux rpm包管理工具
1.什么是rpm包 是一种编译好的二进制软件包,安装速度快. 2.rpm包命名 el6:软件包用于在Red Hat 6.x, CentOS 6.x, and CloudLinux 6.x进行安装 el ...
- computed和watch的用法和区别
computed可以监听v-model(data)中的值,只要值发生变化 他就会重新去计算 computed必须是要有一个返回值的哦 <div id="app"> &l ...
- USACO 利润Profits
洛谷P3009 [USACO11JAN]利润Profits 题解 https://www.luogu.org/problemnew/solution/P3009 JDOJ 2727: USACO 2 ...
- LG1155 「NOIP2008」双栈排序 二分图判定
问题描述 LG1155 题解 \(i,j\)如果不能进入一个栈,要满足存在\(k\),使得\(i<j<k\)且\(a_k<a_i<a_j\) 如果\(i,j\)不能进入一个栈, ...
- Excel-图表制作
柱形图:通常使用柱形图比较数据间的数量关系 折线图:使用折线图来反映数据间的趋势关系 饼图:使用饼图来表示数据间的分配关系 对图表进行刷选 再图表设计下的快速布局可以选择各种样式 迷你图 对某列单 ...
- Maven的Scope区别笔记
依赖的Scopescope定义了类包在项目的使用阶段.项目阶段包括: 编译,运行,测试和发布. 分类说明compile 默认scope为compile,表示为当前依赖参与项目的编译.测试和运行阶段,属 ...
- 2019CCPC网络预选赛 八道签到题题解
目录 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛 6702 & 6703 array 6704 K-th occurrence 6705 path 6706 huntian o ...
- NLP之分词
不同分词工具原理解析 对各种分词工具的介绍,具体参考: http://www.cnblogs.com/en-heng/p/6234006.html 1) jieba 具体参考: https://blo ...
- [LeetCode] 650. 2 Keys Keyboard 两键的键盘
Initially on a notepad only one character 'A' is present. You can perform two operations on this not ...