3

ファイルをダウンロードするために使用される次の方法があります。ダウンロード プロセス中にインターネット接続が切断されない限り、問題なく動作します。その場合、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);
                    }

                }
            }
        }
    }

ありがとう

4

0 に答える 0