我正在开发一个 WPF 下载管理器,它应该支持通过 HTTP 同时下载多个文件、添加新下载、暂停/恢复、显示和更新每个下载过程信息(文件名、大小、下载百分比、剩余时间.. .) 在 DataGrid 中,在 ProgressBar 和一堆其他东西中显示进度。
所以,这个想法是为每个下载过程使用一个单独的线程,并且能够动态地创建/取消线程。实现这一目标的最佳方法是什么?使用BackgroundWorker,线程池?
我正在开发一个 WPF 下载管理器,它应该支持通过 HTTP 同时下载多个文件、添加新下载、暂停/恢复、显示和更新每个下载过程信息(文件名、大小、下载百分比、剩余时间.. .) 在 DataGrid 中,在 ProgressBar 和一堆其他东西中显示进度。
所以,这个想法是为每个下载过程使用一个单独的线程,并且能够动态地创建/取消线程。实现这一目标的最佳方法是什么?使用BackgroundWorker,线程池?
WebClient XXXAsync 等方法已经为您提供了所有方法的DownloadFileAsync
异步版本,这些方法允许您在单独的线程上执行 HTTP 请求。它们还支持 C# 5.0 异步。
由于这是一个 WPF 应用程序,因此您应确保仅使用Dispatcher.BeginInvoke方法在主 UI 线程上修改 UI 控件。
我会直接使用Thread
并保留对我创建的所有踏板的引用。