WPF バックグラウンドワーカーの使い方 質問する

WPF バックグラウンドワーカーの使い方 質問する

私のアプリケーションでは、一連の初期化手順を実行する必要がありますが、完了するまでに 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

  1. 使用して追加

    using System.ComponentModel;
    
  2. 宣言するバックグラウンドワーカー:

    private readonly BackgroundWorker worker = new BackgroundWorker();
    
  3. イベントを購読する:

    worker.DoWork += worker_DoWork;
    worker.RunWorkerCompleted += worker_RunWorkerCompleted;
    
  4. 次の 2 つのメソッドを実装します。

    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)するDoWork

    b) セットworker.WorkerReportsProgress = true;(クレジット:@zagy)

おすすめ記事