在我的应用程序中,我需要执行一系列初始化步骤,这些步骤需要 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;
-
Declare 后台工作者 https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.backgroundworker:
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.RunWorkerAsync();
-
跟踪进度(可选,但通常很有用)
a) 订阅ProgressChanged
事件和使用ReportProgress(Int32)
in DoWork
b) set worker.WorkerReportsProgress = true;
(归功于@zagy)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)