【问题标题】:Should I use the BackgroundWorker class to handle a queue of tasks if I have no UI?如果我没有 UI,我应该使用 BackgroundWorker 类来处理任务队列吗?
【发布时间】:2011-12-29 18:27:35
【问题描述】:

我正在使用 .Net 3.5 (C#),我有一个任务队列,我想一个接一个地运行,我通过使用 BackgroundWorker 类(使用它的 DoWork、RunWorkerCompleted 和 IsBusy 方法和属性)。
1. 如果我没有任何 UI,是否建议使用 BackgroundWorker 类?为什么?
2. 听说BackgroundWorker 类被弃用了,是真的吗?有人知道为什么吗?
3. 还有其他课程可以帮助我完成我上面提到的事情吗?
谢谢!

附言
在第一个任务完成后,我正在运行第二个任务。

【问题讨论】:

  • 我会使用一些自定义或现有的线程作业系统。这可能比 BackGroundWorker 更容易使用。

标签: c# .net-3.5 backgroundworker task-queue


【解决方案1】:

如果您没有任何 UI,您是否需要任何形式的编组到另一个线程?如果您一个接一个地运行任务,我会直接调用它们,除非您需要 做任何更复杂的事情。如果您知道您确实需要在单独的线程中执行此操作,请发布有关您的要求的更多详细信息(包括这是什么类型的项目)。

据我所知,BackgroundWorker 根本没有被弃用。在 C# 5 中,由于新的异步特性,它会变得不那么重要,但据我所知,它仍然可以毫无问题地使用。

【讨论】:

    【解决方案2】:

    BackgroundWorker 类只是提供了一种更简单的使用线程的方法。它与UI有一些关系。请看 Jon Skeet 的回答和他的 cmets。所以,你可以继续使用它。

    听说BackgroundWorker 类已弃用,是真的吗?

    http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx 没有提到不推荐使用 BackgroundWorker。 所以,它没有被弃用。

    【讨论】:

    • 嗯,它与同步上下文有明显的关系——同步上下文最常用于用户界面。我认为我个人从未见过在用户界面的上下文之外。你有兴趣吗?
    • 此外,文档介绍了 BackgroundWorker:“BackgroundWorker 类允许您在单独的专用线程上运行操作。下载和数据库事务等耗时的操作可能会导致您的用户界面 (UI)看起来好像它在运行时停止响应。当您想要一个响应式 UI 并且您面临与此类操作相关的长时间延迟时,BackgroundWorker 类提供了一个方便的解决方案。所以说它“与 UI 没有任何关系”是夸大其词 IMO。
    • @Jon Skeet 我不知道后台工作以何种方式与同步上下文相关。您能否提供任何指示
    • 当您报告进度等时,它使用创建后台工作器时捕获的同步上下文。这就是它设法编组回 UI 线程的方式。
    猜你喜欢
    • 2018-06-12
    • 2010-09-30
    • 2019-12-19
    • 2023-03-07
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多