一尘不染

如何使用WPF背景工作者

c#

在我的应用程序中,我需要执行一系列初始化步骤,这些步骤需要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


阅读 273

收藏
2020-05-19

共1个答案

一尘不染

  1. 使用添加

    using System.ComponentModel;

  2. 声明背景工作者

    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。

    worker.RunWorkerAsync();

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

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

b)设置worker.WorkerReportsProgress = true;(贷方为@zagy)

2020-05-19