【WPF/C#】使用BackgroundWorker实现多线程/异步操作
做WPF时需要做一个异步加载时的Loading遮罩,搜Stackoverflow看到很多方法,看到了这个插件:
BusyIndicator in the extended WPF Toolkit
同时进一步学习了WPF中使用BackgroundWorker类异步操作的经典文章,赶紧Mark一下:
https://elegantcode.com/2011/10/07/extended-wpf-toolkitusing-the-busyindicator/
https://elegantcode.com/2009/07/03/wpf-multithreading-using-the-backgroundworker-and-reporting-the-progress-to-the-ui/
知其然,知其所以然。赶紧学习一下。 :)
2016.12.28更新:
选择用async/await特性,还是用BackgroundWorker类:
- async/await更适合那些需要在后台完成的不相关的小任务,默默开始,默默结束。
- BackgroundWorker适合在后台工作的同时要跟主线程通信的情况,如实时反馈工作进度,允许用户中途中断这个任务,任务完成后的回调等等。
2017.1.18更新:
想一想还是直接把最常用的关键部分贴出来比较方便:
private void DoSomething()
{
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += (o, ea) =>
{
Operation(); // 耗时操作
};
worker.RunWorkerCompleted += (o, ea) =>
{
// work has completed. you can now interact with the UI
// 如隐藏前台Loading遮罩层
};
// 如显示前台Loading遮罩层
worker.RunWorkerAsync();
}
2017.8.23更新:
多线程解决界面死的例子:http://www.cnblogs.com/wangchuang/p/4485797.html
【WPF/C#】使用BackgroundWorker实现多线程/异步操作的更多相关文章
- 使用BackgroundWorker组件进行异步操作编程
本文介绍了BackgroundWorker组件的功能及在基于事件的异步操作编程中的应用,并对组件的实现原理进行简述.在应用程序中,可能会遇到一些执行耗时的功能操作,比如数据下载.复杂计算及数据库事务等 ...
- WPF 同一窗口内的多线程/多进程 UI(使用 SetParent 嵌入另一个窗口)
原文 WPF 同一窗口内的多线程/多进程 UI(使用 SetParent 嵌入另一个窗口) WPF 的 UI 逻辑只在同一个线程中,这是学习 WPF 开发中大家几乎都会学习到的经验.如果希望做不同线程 ...
- WPF 精修篇 BackgroundWorker
原文:WPF 精修篇 BackgroundWorker 效果 <Grid> <Grid.RowDefinitions> <RowDefinition Height=&qu ...
- 在UI程序设计中使用BackgroundWorker进行多线程异步处
WinForm的应用程序中如果执行了一个的非常冗长的处理操作,(比如文件检索,大运算量计算),在执行时就会锁定用户界面,虽然主活动窗口还在运行,但用户无法与程序交互,无法移动窗体或改变窗体大小,导致程 ...
- WPF线程(Step2)——BackgroundWorker
在WPF中第二个常用的线程处理方式就是BackgroundWorker. 以下是BackgroundWorker一个简单的例子. public partial class MainWindow : W ...
- C# Wpf异步修改UI,多线程修改UI(二)
1.使用定时器异步修改 这是相对比较简单的方法 在Wpf中定时器使用DiapatcherTimer,不使用Timer原因: 在一个应用程序中,Timer会重复生成time事件,而DispatcherT ...
- WPF 同一窗口内的多线程 UI(VisualTarget)
WPF 的 UI 逻辑只在同一个线程中,这是学习 WPF 开发中大家几乎都会学习到的经验.如果希望做不同线程的 UI,大家也会想到使用另一个窗口来实现,让每个窗口拥有自己的 UI 线程.然而,就不能让 ...
- wpf新增记录时用多线程的问题
多线程虽然可以增加用户操作体验,但是有时候会出现意想不到的错误. 如果采用分布式,数据库在另外服务器上,当网络出现问题,或者数据库繁忙,那么新增数据就会等待,这时候用户如果以为没有操作,而多次点击新增 ...
- winform和wpf里必知的多线程知识
背景: 很多小伙伴经常在群里问线程的问题,平时我经常转一些视频教程这些人不看,我就自己写个总结吧 不过还是要注意的是,切换本来就不能太频繁,要一口气改. wpf的viewmodel就不需要UI线程,更 ...
随机推荐
- 架构-LAMP特级学习(网站加速解决方案)
1.Squid代理缓存技术 2.页面静态化缓存技术 3.Memcache.Redis等缓存服务器 4.Sphinx搜索加速
- HDUOJ----2487Ugly Windows
Ugly Windows Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- Python 的 if __name__ == '__main__'
Python 文件 最后部分会有: if __name__ == '__main__': TestRLSO()……………… 1)首先,这是一个判断语句. 表示执行的是此代码所在的文件.如果这个文件是作 ...
- 【LeetCode】55. Jump Game
Jump Game Given an array of non-negative integers, you are initially positioned at the first index o ...
- 安卓解析 json 4种格式 全解析
总共4种json , 还提供了 httclient 和 httpurlconnection 2种方式获取json的方法(请把baseurl 改为可以地址比如http://www.sohu.c ...
- Linux内核(16) - 高效学习Linux内核
世界悲结束了,章鱼哥也退役了,连非诚勿扰中的拜金女也突然的少了很多.这本<Linux内核修炼之道>在卓越.当当.china-pub上也已经开卖了,虽然是严肃文学,但为了保证流畅性,大部分文 ...
- 敏捷转型中why与how的总结
敏捷转型參考框架: 为了成功顺畅地推行敏捷开发.下面将对整个敏捷转型參考框架作个整体说明.为企业进行敏捷转型提供基本方法參考.整个敏捷转型參考框架主要包括5个步骤,前两个步骤主要是回答 Wh y的问题 ...
- Linux 配置rdate时间服务器方法
配置多台服务器时,经常需要让各个服务器之间的时间保持同步,如果服务器有外网环境,可以直接同外部的时间服务器更新时间,可以采用rdate命令更新时间: rdate -s tick.greyware.co ...
- nginx实战四
nginx负载均衡 Nginx通过upstream和proxy_pass实现了负载均衡.本质上也是Nginx的反向代理功能,只不过后端的server为多个. 1.简单的轮询 upstream www ...
- Python log10() 函数
描述 log10() 方法返回以10为基数的x对数,x>0. 语法 以下是 log10() 方法的语法: import math math.log10( x ) 注意:log10()是不能直接访 ...