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

时间:2010-08-20 02:28:16

标签: c#

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

4 个答案:

答案 0 :(得分:13)

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

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

  

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

阅读 How to: Run an Operation in the Background 了解相关信息。

答案 1 :(得分:4)

一个简单的例子:

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.
}

有关详细信息,请查看here

答案 2 :(得分:1)

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

如果你需要在U.I.的背景下完成回调。线程 - 使用它。否则你应该使用常规线程。

答案 3 :(得分:0)

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

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

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

http://www.dotnetperls.com/backgroundworker

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

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