次のコード (Silverlight 4 OOB アプリから) を使用すると、ファイル全体 (900 MB 以上) をダウンロードするのに時間がかかり、エラーは報告されませんが、サイズがゼロの結果ストリームが得られます。Fiddler はまた、ファイル全体がダウンロードされたと述べています。
進行状況が変更されたハンドラー (以下には示されていません) がヒットし、ダウンロード率の増加が報告されます。
これは、より小さいファイル (10MB) で機能します。
var wc = new WebClient();
wc.OpenReadCompleted += DownloadWholeFileOpenReadCompleted;
wc.DownloadProgressChanged += DownloadWholeFileDownloadProgressChanged;
wc.OpenReadAsync(new Uri(movie.DownloadUrl, UriKind.Absolute));
private static void DownloadWholeFileOpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
if (e.Cancelled)
{
return; // this is not hit
}
if (e.Error != null)
{
return; // this is not hit
}
using (var fs = new FileStream(tempFilePath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None))
{
var buffer = new byte[4096];
int bytesRead;
// <snip />
// e.Result.Length this equals 0
while ((bytesRead = e.Result.Read(buffer, 0, buffer.Length)) != 0)
{
fs.Write(buffer, 0, bytesRead);
}
fs.Close();
}
// <snip />
}
何か案は?