首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BackgroundWorker和线程

问BackgroundWorker和线程
EN

Stack Overflow用户
提问于 2009-04-14 14:19:52
回答 6查看 3K关注 0票数 8

使用两者来完成给定任务的优缺点分别是什么?

百万美元的问题是使用哪一个,什么时候使用?

非常感谢。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-04-14 14:23:49

我习惯于将BackgroundWorker作为Thread的包装器。所以我在图形用户界面上使用BackgroundWorker,而在更专业或更脏的工作(Windows服务等)上使用线程

票数 3
EN

Stack Overflow用户

发布于 2009-04-14 14:23:39

如果您所说的“线程”是指显式地使用System.Threading.Thread类来创建、配置和启动您自己的线程,那么答案是这样做对您来说是更多的工作,涉及更多的cpu周期,而不仅仅是从线程池中拉出线程(wjhich是其他技术所做的),但它为您提供了更多的灵活性,因为它允许您指定线程优先级,以及使用线程池线程无法提供的其他几个特征。

当在设计时不知道所需的线程数量时,“线程池”方法更合适。该池最初包含少量线程,“准备好”供您调用它们。它可以根据需要动态创建新线程,并为您管理未使用线程的创建、协调和删除。有三种机制可以用来访问和使用池中的线程。

使用technique)

  • Using ()的计时器(最常见的technique)
  1. Using计时器(几个variations)
  2. System.Threading.ThreadPool提供了几个其他功能(BackGroundWorker类、QueueUserWorkItem()等))。
票数 12
EN

Stack Overflow用户

发布于 2009-04-14 14:29:08

看一看this great threading overview

BackgroundWorker提供以下功能:

  • 用于在不使用Abort
  • 的情况下通知工作进程结束的"cancel“标志用于报告进度、完成和IComponent的cancellation
  • An实现的标准协议,允许它位于工作线程上的Visual Studio Designer异常处理中
  • 更新窗体和
  • 控件以响应工作进程或完成的功能。

最后两个功能特别有用-它意味着您不必在worker方法中包含try/catch块,并且无需调用Control.Invoke即可更新Windows窗体和WPF控件。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/747807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档