背景工作者是线程吗? (C#)

背景工作者是线程吗? 我应该什么时候使用它?

是的,它基本上就像一个线程,但具有额外的function(事件通知你进度和完成时间)。

您应该在需要执行可能需要一段时间的事情时使用它(例如计算,文件或数据库读/写,Web请求等),并且您不希望GUI在发生时显示无响应:

BackgroundWorker类允许您在单独的专用线程上运行操作。 下载和数据库事务等耗时的操作可能会导致用户界面(UI)在运行时停止响应。 当您需要响应式UI并且遇到与此类操作相关的长时间延迟时,BackgroundWorker类提供了一种方便的解决方案。

阅读如何:在后台运行操作以获得介绍。

一个简单的例子:

static void Main(string[] args) { BackgroundWorker worker = new BackgroundWorker(); //DoWork is a delegate, where you can add tasks worker.DoWork += (sender, e) => { //blabla }; worker.DoWork += (sender, e) => { //blabla }; worker.RunWorkerCompleted += (sender, e) => { var IfYouWantTheResult = e.Result; //maybe notify others here }; worker.RunWorkerAsync(); //you can cancel the worker/report its progress by its methods. } 

有关详细信息,请点击此处

后台工作程序基本上是一个添加的线程,它将在完成时回调,并且该回调将位于UI线程的上下文中,以便您可以在完成时更新UI。

如果在UI线程的上下文中完成后需要回调 – 请使用它。 否则你应该使用常规线程。

这是一个应用程序的示例代码,它在下载时显示进度条。 使用后台工作者

http://devtoolshed.com/content/c-download-file-progress-bar

这是一个关于后台工作者的快速教程

http://www.dotnetperls.com/backgroundworker

我建议您在耗时的操作(下载文件等)时使用它,并且您希望UI处于活动状态。 如果您想在界面上显示进度,例如在标签上显示百分比,或者您想使用进度条,这是一个有用的function。

我特别将它与进度条控件一起使用。