【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更新:
posted @ 2016-12-26 16:35  霍莉雪特  阅读(1513)  评论(0编辑  收藏  举报