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 ...
随机推荐
- LeeCode——Combine Two Tables
Table: Person +-------------+---------+ | Column Name | Type | +-------------+---------+ | PersonId ...
- gradle入门
gradle入门 简介: Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具.它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于 ...
- python_机器学习_最临近规则分类(K-Nearest Neighbor)KNN算法
1. 概念: https://scikit-learn.org/stable/modules/neighbors.html 1. Cover和Hart在1968年提出了最初的临近算法 2. 分类算法( ...
- python_机器学习_监督学习模型_决策树
决策树模型练习:https://www.kaggle.com/c/GiveMeSomeCredit/overview 1. 监督学习--分类 机器学习肿分类和预测算法的评估: a. 准确率 b.速度 ...
- 网络流之最大流Dinic --- poj 1459
题目链接 Description A power network consists of nodes (power stations, consumers and dispatchers) conne ...
- NOI.AC 722: tree
就贴个代码 #include <cstdio> #include <algorithm> typedef long long LL; const int MN = 200005 ...
- qt需求
1.登录框 账号密码 复杂度判断 2.监控 权限认证 (5分钟必须锁定,退回登录状态)--b/s 3.exe 嵌入exe (什么时间触发了什么消息,任何消息触发都可以,日志文件zlog,5分钟没有写 ...
- 201871010128-杨丽霞《面向对象程序设计(Java)》第十一周学习总结
201871010128-杨丽霞<面向对象程序设计(Java)>第十一周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...
- day6_7.4总结数据类型的可变不可变
续昨天: 列表的常用方法: 1.chear() 用途:清空列表,其返回值无,返回none. list1=[1,2,3,4,5] a=list1.clear() print(list1) print(a ...
- nodejs接收post请求参数
原文 https://blog.csdn.net/u013263917/article/details/78682270#1.2 nodejs接收post请求参数1.1-浏览器发送post请求参数的方 ...