我想在一个新线程中开始一项工作或使用 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/