繁体   English   中英

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

[英]Is background worker a thread? (C#)

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

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

您应该在需要执行可能需要一段时间的事情时使用它(例如计算,文件或数据库读/写,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处于活动状态。 如果您想在界面上显示进度,例如在标签上显示百分比,或者您想要使用进度条,这是一个有用的功能。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM