Почему DownloadItems отвечают за отчеты о прогрессе (с точки зрения разработки API)?
Я бы сказал, что DownloadManager отвечает за загрузку DownloadItems и, следовательно, также за отчет о проделанной работе. (Внутренняя стратегия реализации может, конечно, отличаться.)
Я бы выбрал второй вариант:
var dm = DownloadManager
{
"http://google.com",
new DownloadItem("http://yahoo.com") { Retries = 5 }
};
dm.ProgressChanged += (sender, e) =>
Console.WriteLine("Download {0}: {1:P}", e.Uri, (double)e.Progress / 100.0);
dm.DownloadCompleted += (sender, e) =>
Console.WriteLine("Download {0}: completed!", e.Uri);
dm.DownloadAllCompleted += (sender, e) =>
Console.WriteLine("All downloads completed!");
dm.Add("http://stackoverflow.com");
dm.DownloadAllAsync();
Если у вас есть копия Руководства по проектированию платформы (2-е изд.), Посмотрите страницы 305-312 (Асинхронный шаблон на основе событий).