Файл загрузки Windows Mobile 6.5 (c#.net cf 3.5) зависает при потоковом чтении

У меня есть следующий метод, который используется для загрузки файла. Он работает нормально, если интернет-соединение не обрывается во время процесса загрузки. В этом случае он застревает на чтении из ReceiveStream (т. е. в len = receiveStream.Read(buffer, 0, buffer.Length). Он не продолжается и не выдает исключение, просто кажется, что он застрял там навсегда. установите тайм-ауты на 10 секунд и поймайте их выше Я делаю что-то не так или что-то упускаю?

Я также пробовал использовать асинхронные методы (BeginGetResponse, BeginRead и т. д.), и они тоже застревают.

Я протестировал это как на профессиональном эмуляторе Windows Mobile 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);
                    }

                }
            }
        }
    }

Спасибо


person unohoo    schedule 23.01.2013    source источник
comment
могу я уточнить: работает ли ReadWriteTimeout в настоящее время? или не работает? значение: вы в конечном итоге получите TimeoutException (через 10 секунд?)   -  person Marc Gravell    schedule 23.01.2013
comment
Нет, тайм-аут не выбрасывается. Я оставил его примерно на 10 минут, и он все еще не выдает исключение. Также в этом ответе stackoverflow.com/questions/9140289/ предлагается чтобы ReadTimeout для ReceiveStream был установлен, однако это вызывает UnsupportedException («тайм-ауты не поддерживаются в этом потоке»)   -  person unohoo    schedule 23.01.2013