Несколько веб-клиентов, со временем weclints перестают работать - PullRequest
3 голосов
/ 31 июля 2009

первый постер, долгое время читатель, так что будьте полегче со мной :)

Я пишу приложение, которое читает в кучу папок и позволяет загрузить изображение для каждой папки. Существует элемент управления WebBrowser, в котором можно перейти к определенному изображению и нажать кнопку «использовать это изображение для выбранной папки».

Каждая «папка» представлена ​​как объект со своим собственным методом загрузки, который использует WebClient внутри потока BackgroundWorker.

Когда я устанавливаю URL-адрес изображения для объекта, он запускает фоновый работник этого объекта и запускает этот код

        using (WebClient client = new WebClient())
        {
            client.Proxy = null;
            Stream stream = client.OpenRead(BackdropUrl);
            Bitmap bitmap = new Bitmap(stream);
            stream.Flush();
            stream.Close();
            e.Result = bitmap;
        }

Я также использую веб-клиент в главном потоке своих приложений, чтобы выполнить простой html-анализ.

Теперь к проблеме. Когда я начинаю использовать приложение, все хорошо, файлы загружаются по мере того, как я просматриваю список, но через некоторое время кажется, что веб-клиенты случайно перестают отвечать на запросы. Я все еще могу просматривать элемент управления веб-браузера, но весь код выполнения веб-клиента, кажется, не завершен, он просто висит на одной из этих двух строк:

Stream stream = client.OpenRead(BackdropUrl);
Bitmap bitmap = new Bitmap(stream);

Я знаю, что это все еще довольно расплывчато, но я пытался объяснить это как мог. Может быть, у кого-нибудь есть более надежный способ загрузки изображения прямо в растровый объект? т.е. не сохранять в файл, а затем снова открывать его?

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 11 августа 2009

WebClient не поддерживает заданные пользователем тайм-ауты, и (IIRC) имеет тайм-аут по умолчанию 100 000 мсек (100 секунд). Попробуйте подождать> 100 секунд и посмотрите, нет ли у вас каких-либо исключений.

Если это проблема, вам, вероятно, потребуется реорганизовать рефакторинг, чтобы использовать вместо него классы HTTPWebRequest и HTTPWebResponse в WebClient и настроить более разумное время ожидания.

0 голосов
/ 02 августа 2009

В размещенном фрагменте кода вы, похоже, не избавляетесь от созданных вами BitMap объектов

...