【问题标题】:Difference between BackgroundWorker and System.Threading.ThreadBackgroundWorker 和 System.Threading.Thread 之间的区别
【发布时间】:2010-12-09 18:50:40
【问题描述】:

使用 BackgroundWorker 创建线程和使用 System.Threading.Thread 创建线程有什么区别?

【问题讨论】:

    标签: c# vb.net multithreading


    【解决方案1】:

    BackgroundWorker类基本上抽象了Thread的创建和监控过程,并给你一个事件驱动的API来报告操作的进度(ProgressChanged)并确定你的操作何时完成(RunWorkerCompleted )...

    它最常见的用途之一是在后台执行长时间运行的进程时保持 Windows GUI 响应。所以基本上,它只是 System.Threading.Thread 的一个包装器,旨在使后台线程更简单一些(顾名思义!)

    【讨论】:

    • 所以基本上,它只是 System.Threading.Thread 的一个包装器,旨在让线程更简单一点?
    • @MattDavis 很棒的链接,如果有描述或不仅仅是链接,它可能会更有意义。
    • 我试图协调你的评论:“当一个长时间运行的进程在后台执行时”与 Hans Passant 的comment 他说:“使用线程池很重要 [BackgroundWorker ] 线程仅在它所做的工作受到限制时使用,理想情况下不超过半秒。”。什么给了?
    【解决方案2】:

    BackgroundWorker 实际上是通过委托进行异步线程调用的包装器——使用反射器可以看到它相应地调用了开始/结束调用方法。这与System.Threading.Thread 的不同之处在于它使用线程池而不是启动一个全新的线程。

    使用后台工作者的主要原因是它可以很好地插入 Windows 窗体应用程序。

    【讨论】:

    • +1 用于准确捕捉后台工作人员使用线程池的事实。此外,如果您需要调用 STA Com 对象,因为无法设置公寓,因此对于不知道 BackgroundWorker 不是一个好选择的人来说很有用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2020-05-10
    • 2014-09-20
    • 2010-10-28
    • 2015-10-04
    • 2012-08-12
    相关资源
    最近更新 更多