WPF利用多线程的后台线程
来源:互联网 发布:mac 使命召唤 编辑:程序博客网 时间:2024/05/18 13:06
最近学了一下WPF的后台线程,在这里简单的把代码贴出来,具体的使用已经在程序里面注释了。
using System;using System.Collections.Generic;using System.Linq;using System.Text;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;//多线程需要添加的命名空间using System.ComponentModel;using System.Threading;namespace 多线程测试{ /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { private BackgroundWorker bgWorker = new BackgroundWorker(); private int i = 0; public MainWindow() { InitializeComponent(); //支持报告进度更新 bgWorker.WorkerReportsProgress = true; //支持异步取消 bgWorker.WorkerSupportsCancellation = true; //将DoWork_Handler绑定在RunWorkerAsync() bgWorker.DoWork += DoWork_Handler; //将ProgressChanged_Handler绑定在ReportProgress() bgWorker.ProgressChanged += ProgressChanged_Handler; //退出时发生 bgWorker.RunWorkerCompleted += RunWorkerCompleted_Handler; } /// <summary> /// 开始按钮 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnProcess_Click(object sender, RoutedEventArgs e) { if (!bgWorker.IsBusy) { bgWorker.RunWorkerAsync(); } } /// <summary> /// 取消按钮 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnCancel_Click(object sender, RoutedEventArgs e) { bgWorker.CancelAsync(); } /// <summary> /// 进度更新 /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private void ProgressChanged_Handler(object sender, ProgressChangedEventArgs args) { lbDisplay.Items.Add("第" + i + "次测试"); } /// <summary> /// 后台线程 /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private void DoWork_Handler(object sender, DoWorkEventArgs args) { BackgroundWorker worker = sender as BackgroundWorker; while (true) { if (worker.CancellationPending) { args.Cancel = true; break; } else { i++; bgWorker.ReportProgress(0); Thread.Sleep(500); } } } /// <summary> /// 执行完成或正常退出后的事件 /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private void RunWorkerCompleted_Handler(object sender, RunWorkerCompletedEventArgs args) { if (args.Cancelled) { MessageBox.Show("后台任务已经被取消。", "消息"); } else { MessageBox.Show("后台任务正常结束。", "消息"); } } }}
0 0
- WPF利用多线程的后台线程
- 验证后台线程的java多线程技术
- Java多线程后台线程
- python多线程编程(8):线程的合并和后台线程
- python多线程编程(8):线程的合并和后台线程
- python多线程编程(8):线程的合并和后台线程
- WPF 多线程---- 子线程操作界面主线程的元素
- WPF里面多线程访问UI线程、主线程的控件
- 进度条(BackgroundWorker后台线程处理)--WPF应用
- 多线程-前台和后台线程
- Java多线程五:后台线程
- 【多线程-前台线程和后台线程】
- WPF多线程的实现
- WPF的多线程问题
- WPF 中 的多线程
- WPF的线程模型
- WPF的线程模型
- WPF的线程模型
- 可拖动排序的ListView
- SpringMVC中ModelAndView跳转错误的问题
- HDU 4586 Play the Dice(概率+期望)
- HDU_1233《还是畅通工程》
- SpringMVC ajax post 提交数据,报错406:Not Acceptable
- WPF利用多线程的后台线程
- lucene(二)索引的建立 Directory,lockFactory
- 公司拷贝不了文件到U盘,如何处理呢?
- MFC串口编程详细教程
- 在KVM客户机RHEL6中安装Xen4.x
- 将字典或者数组转换成JSON数据或者字符串
- 如何查找java.lang.NullPointerException的原因
- 【iOS知识学习】_iPhone学习微信分享到好友/短信
- 不容易系列之(3)—— LELE的RPG难题