在我的应用程序中,我需要执行一系列初始化步骤,这些步骤需要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?
BackgroundWorker
使用添加
using System.ComponentModel;
声明背景工作者:
private readonly BackgroundWorker worker = new BackgroundWorker();
订阅事件:
worker.DoWork += worker_DoWork; worker.RunWorkerCompleted += worker_RunWorkerCompleted;
实现两种方法:
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 }
每当需要时,异步运行worker。
worker.RunWorkerAsync();
跟踪进度(可选,但通常很有用)
一)订阅ProgressChanged事件和使用ReportProgress(Int32)中DoWork
ProgressChanged
ReportProgress(Int32)
DoWork
b)设置worker.WorkerReportsProgress = true;(贷方为@zagy)
worker.WorkerReportsProgress = true;