2012-02-04 76 views
2

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

因此,这个想法是为每个下载过程使用一个单独的线程,并且能够动态地创建/取消线程。什么是完成这个最好的方法?使用BackgroundWorker,ThreadPool?

+0

您可能还需要多个线程为每个下载过程 – 2012-02-04 21:57:47

回答

0

我只是直接使用Thread并保留对所创建的所有步骤的引用。

6

WebClient XXXAsync方法(例如DownloadFileAsync)已经为您提供了允许您在单独的线程上执行HTTP请求的所有方法的异步版本。它们也是C#5.0异步准备就绪。

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

+0

是的,以及我不能使用WebClient,因为它不支持暂停/恢复下载,所以我必须为HttpWebRequest创建一个自定义包装。我想我将不得不为每个进程使用一个新的'Thread'并将其设置为后台线程。 – marko 2012-02-05 22:44:39