【问题标题】:Multi-threaded downloader in C#C#中的多线程下载器
【发布时间】:2012-02-04 21:51:25
【问题描述】:

我正在开发一个 WPF 下载管理器,它应该支持通过 HTTP 同时下载多个文件、添加新下载、暂停/恢复、显示和更新每个下载过程信息(文件名、大小、下载百分比、时间left...) 在 DataGrid 中,在 ProgressBar 和一堆其他东西中显示进度。

所以,这个想法是为每个下载进程使用一个单独的线程,并且能够动态地创建/取消线程。实现这一目标的最佳方法是什么?使用 BackgroundWorker、ThreadPool?

【问题讨论】:

  • 每个下载过程可能还需要多个线程

标签: c# multithreading download-manager


【解决方案1】:

WebClient XXXAsync 方法(例如DownloadFileAsync)已经为您提供了所有方法的异步版本,允许您在单独的线程上执行 HTTP 请求。它们还支持C# 5.0 async

由于这是一个 WPF 应用程序,您应该确保仅在使用 Dispatcher.BeginInvoke 方法的主 UI 线程上修改 UI 控件。

【讨论】:

  • 是的,我不能使用 WebClient,因为它不支持暂停/恢复下载,所以我必须为 HttpWebRequest 创建一个自定义包装器。我想我必须为每个进程使用一个新的Thread 并将其设置为后台线程。
【解决方案2】:

我会直接使用Thread 并保留对我创建的所有踏板的引用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    • 2020-11-03
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 2022-11-02
    • 2023-03-16
    相关资源
    最近更新 更多