后台工作者是线程吗?我什么时候应该使用它?
答案 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处于活动状态。如果您想在界面上显示进度,例如在标签上显示百分比,或者您想要使用进度条,这是一个有用的功能。
我特别将它与进度条控件一起使用。