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 ...
随机推荐
- Retrofit+Okhttp+RxJava打造网络请求之Post
之前一直在准备Android培训的事情,所幸的是终于完事啦,在这过程中真的发现了自身无论从沟通能力还是技术能力上很多的不足,就用一句 路漫漫其修远兮,吾将上下而求索 来勉励自己吧.之前也在项目上用上O ...
- ios视频网盘
http://pan.baidu.com/share/home?uk=1711799154#category/type=0
- 网络远程唤醒 WOL Magic Packet【转】
转自:https://www.cnblogs.com/dcb3688/p/4608063.html Magic Packet Magic Packet白皮书介绍: The basic technica ...
- linux设备驱动程序-设备树(1)-dtb转换成device_node
linux设备驱动程序-设备树(1)-dtb转换成device_node 本设备树解析基于arm平台 从start_kernel开始 linux最底层的初始化部分在HEAD.s中,这是汇编代码,我们暂 ...
- Spring Junit 测试样例
SpringMVC 框架下的junit测试方式 package com.sixeco.user.controller; import org.apache.logging.log4j.LogManag ...
- 【POJ3784】Running Median
Running Median Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3406 Accepted: 1576 De ...
- tar命令-解压和压缩文件
tar命令 可以用来压缩打包单文件.多个文件.单个目录.多个目录. Linux打包命令_tar tar命令可以用来压缩打包单文件.多个文件.单个目录.多个目录. 常用格式: 单个文件压缩打包 tar ...
- UiPath:取系统时间/分取各个时间/修改时间显示格式
取系统时间/分取各个时间/修改时间显示格式解决方法: system_time.Year.ToString+"年"+system_time.Month.ToString+" ...
- WebSocket协议-原理篇
本篇文章主要讲述以下几点: WebSocket的原理与机制 WebSocket与Socket.io WebSocket兼容性 WebSocket的原理与机制 WebSocket协议分为两部分:握手和数 ...
- 使用node.js的http-server开启一个本地服务器
用html写了一个网页,想要在手机上查看适配效果,但是苦于手机上没有直接查看HTML的.想到手机和电脑都在一个局域网内,能不能搭建一个局域网内的网页服务器呢? 1.下载 http-server 显然, ...