3

初めてのポスター、長年の読者なので、気楽にやってください :)

多数のフォルダーを読み取り、各フォルダーの画像をダウンロードできるアプリケーションを作成しています。特定の画像を参照し、「選択したフォルダーにこの画像を使用する」ボタンをクリックできる WebBrowser コントロールがあります。

各「フォルダー」は、BackgroundWorker Thread 内で 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;
        }

また、アプリケーションのメイン スレッドで Web クライアントを使用して、簡単な html の「スクレイピング」を行っています。

さて、問題に。アプリの使用を開始すると、すべて問題なく、リストを確認するとファイルがダウンロードされますが、しばらくすると、Web クライアントがランダムに応答しなくなるようです。Web ブラウザー コントロール内をブラウズすることはできますが、すべての Web クライアント実行コードが完了していないようで、次の 2 行のいずれかでハングします。

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 に答える