做WPF时需要做一个异步加载时的Loading遮罩,搜*看到很多方法,看到了这个插件:
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