如何使用 WPF 后台工作者

2024-02-17

在我的应用程序中,我需要执行一系列初始化步骤,这些步骤需要 7-8 秒才能完成,在此期间我的 UI 变得无响应。为了解决这个问题,我在一个单独的线程中执行初始化:

public void Initialization()
{
    Thread initThread = new Thread(new ThreadStart(InitializationThread));
    initThread.Start();
}

public void InitializationThread()
{
    outputMessage("Initializing...");
    //DO INITIALIZATION
    outputMessage("Initialization Complete");
}

我读过几篇关于BackgroundWorker以及它如何让我保持应用程序的响应能力,而无需编写线程来执行冗长的任务,但我在尝试实现它方面没有取得任何成功,任何人都可以告诉我如何使用BackgroundWorker?


  1. 添加使用

    using System.ComponentModel;
    
  2. Declare 后台工作者 https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.backgroundworker:

    private readonly BackgroundWorker worker = new BackgroundWorker();
    
  3. 订阅活动:

    worker.DoWork += worker_DoWork;
    worker.RunWorkerCompleted += worker_RunWorkerCompleted;
    
  4. 实现两个方法:

    private void worker_DoWork(object sender, DoWorkEventArgs e)
    {
        // run all background tasks here
    }
    
    private void worker_RunWorkerCompleted(object sender, 
                                               RunWorkerCompletedEventArgs e)
    {
        //update ui once worker complete his work
    }
    
  5. 每当您需要时运行异步工作线程。

    worker.RunWorkerAsync();
    
  6. 跟踪进度(可选,但通常很有用)

    a) 订阅ProgressChanged事件和使用ReportProgress(Int32) in DoWork

    b) set worker.WorkerReportsProgress = true;(归功于@zagy)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 WPF 后台工作者 的相关文章

随机推荐