ファイルをダウンロードするために使用される次の方法があります。ダウンロード プロセス中にインターネット接続が切断されない限り、問題なく動作します。その場合、receiveStream の読み取りでスタックします (つまり、len = receiveStream.Read(buffer, 0, buffer.Length)。続行しないか、例外をスローします。永遠にそこにスタックしているように見えます。タイムアウトを 10 秒に設定し、より高い値にキャッチします。
非同期メソッド (BeginGetResponse、BeginRead など) も使用してみましたが、それらもスタックします。
Windows モバイル 6 プロフェッショナル エミュレーターと Windows モバイル デバイスの両方でこれをテストしました。
private void DownloadFile(string url, string filename)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Timeout = 10000;
request.ReadWriteTimeout = 10000;
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (Stream receiveStream = response.GetResponseStream())
{
long size = response.ContentLength;
using (Stream file = File.OpenWrite(filename))
{
byte[] buffer = new byte[8 * 1024];
int len;
while ((len = receiveStream.Read(buffer, 0, buffer.Length)) > 0)
{
file.Write(buffer, 0, len);
total += len;
UpdateDownloadState(total, size);
}
}
}
}
}
ありがとう