在我的应用程序中,我需要执行一系列初始化步骤,这些步骤需要 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
来实现它?
最佳答案
添加使用
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 async。
worker.RunWorkerAsync();
跟踪进度(可选,但通常很有用)
a) 订阅
ProgressChanged
事件并在DoWork
中使用ReportProgress(Int32)
b) 设置
worker.WorkerReportsProgress = true;
(感谢@zagy)
关于c# - 如何使用 WPF 后台 worker ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5483565/