c# - 作为新线程运行类

标签 c# vb.net backgroundworker

我想在一个新线程中开始一项工作或使用 backgroundworker 来完成这项工作,但之前没有这样做过,我想问你我应该怎么做。

我的程序有一个带有文件列表的数据 GridView ,每行一个文件。我希望用户能够选择一行,然后按“开始下载”以开始后台下载作业。我想获取有关下载进度的事件。

我有一个类 clsDownload 可以处理所有事情并引发事件,但我该如何实现后台工作?

我应该在类内部使用 System.ComponentModel.BackgroundWorker 还是创建一些包装器来处理它或使用其他一些线程 Material ?

谢谢。

编辑: 我不明白如何在 backgroundworker 中实现我的下载,任何小例子都会很好。 msdn 上的示例并没有让我走得太远。

我有一个具有 StartDownload 功能的下载类。我应该在类里面还是在来电者中使用背景 worker ? “感觉很蠢”

最佳答案

如果你只做下载,不需要其他异步处理,你可以使用 WebClient 的异步方法类(class)。尽管由于您已经拥有自己的类(class),所以这可能不是适合您的解决方案。

否则,您可以使用BackgroundWorker正如你提到的。 MSDN 页面有一个如何操作的示例。

编辑:短篇小说是:

  • 您从调用者创建BackgroundWorker
  • 当你想开始后台工作时,调用BackgroundWorker.RunWorkerAsync;
  • DoWork 事件处理程序中,您执行后台工作,在您的情况下,您启动下载类;
  • 当你在做后台工作时,你必须每隔一段时间检查一次CancelationPending
  • 当你想报告一些进度时,你需要计算它的百分比并调用ReportProgress

如果您需要真正定制的东西,您可以随时创建自己的 Thread .

我个人会坚持使用 BackgroundWorker。它为工作的各个阶段提供了一组很好的通知。如果您使用 Thread,则必须自己实现这些。

我还要确保代码不会创建太多实例。您想要限制并发下载的数量并将超过该数量的任何内容排队。

关于c# - 作为新线程运行类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/614111/

相关文章:

c# - 带有 View 的 Entity Framework 6 迁移

wpf - 触发时间延迟

c# - 处理 URL 和获取数据

c# - 后台 worker 访问 UI 的正确方法

c# - BackgroundWorker Completed 似乎没有在主线程中运行?

c# - 当我将 visible 正确设置为 true 时,如何防止我的 C# winforms 应用程序窃取焦点?

c# - 子进程运行时退出父进程

c# - 奇怪的 .Net 日期时间问题

c# - 什么是NullReferenceException,如何解决?

c# - 在运行时创建复杂的用户控件而不卡住 GUI