3

第一次发帖,老读者了,所以放轻松:)

我正在编写一个读取一堆文件夹并允许您为每个文件夹下载图像的应用程序。有一个 WebBrowser 控件,您可以在其中浏览到特定图像,然后单击“将此图像用于所选文件夹”按钮。

每个“文件夹”都表示为一个具有自己下载方法的对象,该方法在 BackgroundWorker 线程中使用 WebClient。

当我在对象上设置图像 url 时,它会启动该对象的 backgroundworker 并运行此代码

        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;
        }

我还在我的应用程序主线程中使用了一个 webclient 来做一些简单的 html “抓取”。

现在,问题。当我开始使用该应用程序时,一切都很好,文件将在我浏览列表时下载,但过了一会儿,似乎网络客户端随机变得无响应。我仍然可以在 webbrowser 控件中浏览,但所有 webclient 执行代码似乎都没有完成,它只是挂在这两行之一:

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

我知道这仍然很模糊,但我尽力解释它。有没有人可能有更强大的方式将图像直接下载到 Bitmap 对象中?即不保存到文件然后再次打开它?

任何帮助将不胜感激。

4

2 回答 2

1

WebClient 不支持用户指定的超时,并且 (IIRC) 的默认超时为 100,000 毫秒(100 秒)。尝试等待 >100 秒,看看是否有任何异常。

如果这是问题所在,您可能需要重构以在 WebClient 上使用 HTTPWebRequest 和 HTTPWebResponse 类,并配置更合理的超时。

于 2009-08-10T23:02:37.510 回答
0

在发布的代码片段中,您似乎没有处理BitMap您创建的对象

于 2009-08-02T02:14:18.403 回答