<Window x:Class="WpfApp53.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp53"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ListBox Grid.Row="0" x:Name="listBox1"/>
<ProgressBar Grid.Row="1" x:Name="progressBar1" Height="20" Margin="5"/>
<StackPanel Grid.Row="2" Orientation="Horizontal" Margin="5">
<TextBlock Text="Status: "/>
<TextBlock x:Name="statusTextBox"/>
</StackPanel>
<Grid Grid.Row="3" Margin="10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Button Grid.Column="0" x:Name="startBtn" Content="Start" Click="StartBtn_Click"/>
<Button Grid.Column="1" x:Name="cancelBtn" Content="Cancel" Click="CancelBtn_Click"/>
</Grid>
</Grid>
</Window>
 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes; namespace WpfApp53
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
BackgroundWorker bgWorker;
public MainWindow()
{
InitializeComponent();
cancelBtn.IsEnabled = false;
} private void StartBtn_Click(object sender, RoutedEventArgs e)
{
listBox1.Items.Clear();
startBtn.IsEnabled = false;
cancelBtn.IsEnabled = true;
bgWorker = new BackgroundWorker();
bgWorker.DoWork += BgWorker_DoWork;
bgWorker.ProgressChanged += BgWorker_ProgressChanged;
bgWorker.RunWorkerCompleted += BgWorker_RunWorkerCompleted;
bgWorker.WorkerReportsProgress = true;
bgWorker.WorkerSupportsCancellation = true; int maxItems = ;
progressBar1.Minimum = ;
progressBar1.Maximum = ; statusTextBox.Text = "Starting...";
bgWorker.RunWorkerAsync(maxItems);
} private void BgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if(e.Cancelled)
{
statusTextBox.Text = "Cancelled";
}
else
{
statusTextBox.Text = "Completed";
}
statusTextBox.IsEnabled = true;
cancelBtn.IsEnabled = false;
} private void BgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
double percent = (e.ProgressPercentage * ) / ;
progressBar1.Value = Math.Round(percent, );
listBox1.Items.Add(new ListBoxItem { Content = e.ProgressPercentage + " item added" });
statusTextBox.Text = Math.Round(percent, ) + "% percent completed";
} private void BgWorker_DoWork(object sender, DoWorkEventArgs e)
{
int? maxItems = e.Argument as int?;
for(int i=;i<=maxItems.GetValueOrDefault();i++)
{
if(bgWorker.CancellationPending)
{
e.Cancel = true;
break;
}
Thread.Sleep();
bgWorker.ReportProgress(i);
}
} private void CancelBtn_Click(object sender, RoutedEventArgs e)
{
bgWorker.CancelAsync();
startBtn.IsEnabled = true;
}
}
}

Wpf Backgroundworker的更多相关文章

  1. WPF线程(Step2)——BackgroundWorker

    在WPF中第二个常用的线程处理方式就是BackgroundWorker. 以下是BackgroundWorker一个简单的例子. public partial class MainWindow : W ...

  2. 让你的WPF程序使用多线程——BackgroundWorker

    在wpf中可以使用许多方法执行异步操作.利用.NET的芳芳就是手动创建一个新的System.Threading.Thread对象,提供一步代码,并使用THread.Start()方法加载代码.这种方法 ...

  3. WPF 分页控件 WPF 多线程 BackgroundWorker

    WPF 分页控件 WPF 多线程 BackgroundWorker 大家好,好久没有发表一篇像样的博客了,最近的开发实在头疼,很多东西无从下口,需求没完没了,更要命的是公司的开发从来不走正规流程啊, ...

  4. 【WPF/C#】使用BackgroundWorker实现多线程/异步操作

    做WPF时需要做一个异步加载时的Loading遮罩,搜Stackoverflow看到很多方法,看到了这个插件: BusyIndicator in the extended WPF Toolkit 同时 ...

  5. WPF 精修篇 BackgroundWorker

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

  6. WPF 耗时操作时,加载loging 动画 (BackgroundWorker 使用方法)

    1.定义一个全局 BackgroundWorker private System.ComponentModel.BackgroundWorker bgMeet0; 2.设置执行耗时的任务为True b ...

  7. WPF 后台任务 等待动画 样例 && C# BackgroundWorker 详解

    运行效果: 前台代码: <Window x :Class="Waiting.Window1" xmlns="http://schemas.microsoft.com ...

  8. WPF之BackgroundWorker

    BackgroundWorker类允许您在单独的线程上执行某个可能导致用户界面(UI)停止响应的耗时操作,下面来介绍一下这个线程类BackgroundWorker,大家可以结合这位大佬的这篇文章,说的 ...

  9. WPF 线程 Dispatcher

    WPF 应用程序从两个线程开始: 一个用于处理呈现 一个用于管理 UI 呈现线程有效地隐藏在后台运行,而UI线程则接收输入.处理事件.绘制屏幕以及运行应用程序代码. 大多数应用程序都使用一个 UI 线 ...

随机推荐

  1. SpringBoot运行异常时捕获

    一.目录展示 二.FirstController 三.ExceptionHandler 捕获异常类 四.效果展示

  2. java大数习题

    大数加法,题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1002 import java.math.BigInteger; import java.ut ...

  3. [Muxi_k] Manjaro安装WPS过程

    Manjaro安装WPS过程 首先安装WPS: sudo pacman -S wps-office 1一条命令解决安装好后就可以在显示应用程序这里看到图标了 笔者在安装的时候出了点问题,就是下载了一短 ...

  4. Centos 7 下安装 Jenkins

    Jenkins介绍 Jenkins是一个开源的支持自动化构建.部署等任务的平台.基本上可以说是持续集成(CI).持续发布(CD)不可或缺的工具. 安装Java环境 CentOS 7 安装 JAVA环境 ...

  5. 一起学Android之ContentProvider

    本文主要讲解在Android开发中ContentProvider的常规用法,仅供学习分享使用,如有不足之处,还请指正. 访问一个ContentProvider 在Android开发中,应用程序通过Co ...

  6. vsto 检测是否在编辑状态或者光标闪动

    object m = Type.Missing; const int MENU_ITEM_TYPE = 1; const int NEW_MENU = 18; CommandBarControl oN ...

  7. C#中获取多个对象list中对象共有的属性项

    场景 有一组数据list<TestDataList> 每一个TestDataList是一个对象,此对象可能有温度数据,也可能没有温度数据. 有温度数据的情况下,温度数据属性又是一个list ...

  8. GPS NMEA-0183协议常用报文数据格式

    点击上方↑↑↑蓝字[协议分析与还原]关注我们 " 整理的GPS有关的协议分析资料." 之前分析一些车载设备的流量时,有部分经验,在这里和大家分享. 产生这些流量的设备通常是实体终端 ...

  9. Oracle 备份数据库

    [目录] ①备份数据库(https://www.cnblogs.com/xqz0618/p/oracle_backup.html) ②定时备份数据库(https://www.cnblogs.com/x ...

  10. WebMagic使用代理ip爬数据解决HTTP407问题

    手头一个小活儿是爬竞品网站数据.使用webmagic来实现.光公司ip不行,被封了就会影响业务正常访问.刚好公司另一个项目购买了代理IP资源“站大爷”,那个项目夭折了,于是申请借来用用. 调通站大爷提 ...