2009-07-31 8 views
3

ersten Mal Plakat, Leser lange Zeit, so nehmen Sie es einfach auf mich :)Mehrere WebClients, Im Laufe der Zeit weclints aufhören zu arbeiten

ich eine Anwendung Ich schreibe, die in einer Reihe von Ordnern liest und ermöglicht es Ihnen, ein zum Download Bild für jeden Ordner. Es gibt ein WebBrowser-Steuerelement, wo Sie zu einem bestimmten Bild navigieren können, und klicken Sie auf eine Schaltfläche "Dieses Bild für den ausgewählten Ordner verwenden".

Jeder "Ordner" wird als Objekt mit einer eigenen Download-Methode dargestellt, die den WebClient in einem BackgroundWorker-Thread verwendet.

Wenn ich die Bild-URL auf das Objekt festgelegt, startet sie die Background dieses Objekts und führt diesen Code

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

ich auch ein Webclient in meine Anwendungen Hauptthread verwenden einige einfache html „Schaben“ zu tun .

Nun zu dem Problem. Wenn ich anfange, die App zu verwenden, ist alles gut, die Dateien werden heruntergeladen, während ich durch die Liste gehe, aber nach einer Weile scheint es, dass die Web-Clients nach dem Zufallsprinzip nicht mehr reagieren. Ich kann immer noch in der Web-Browser Kontrolle stöbern, aber alle webclient Ausführungscode scheint nicht vollständig hängt es nur an einen dieser beiden Linien:

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

Ich weiß, das ist immer noch ziemlich vage, aber ich versuchte zu erklären, so gut ich konnte. Hat jemand vielleicht eine robustere Möglichkeit, ein Bild direkt in ein Bitmap-Objekt herunterzuladen? d. h. nicht in Datei speichern und dann wieder öffnen?

Jede Hilfe wird sehr geschätzt.

+0

Haben Sie das gleiche Problem, wenn Sie denselben WebClient verwenden, anstatt für jede Datei einen neuen zu erstellen? –

+0

Nun, ich versuche, jedes Objekt "in sich geschlossen" zu halten (weiß nicht, ob das der richtige Ausdruck ist), also weiß ich jetzt nicht, ob es einen Weg gibt, dies zu tun und nur einen Webclient zu verwenden? Ich habe schnell einen Test bei der Arbeit gemacht und es schien ohne Probleme zu funktionieren, also weiß ich nicht, ob es vielleicht meine Internetverbindung zu Hause ist, die das verursachen könnte? Vielleicht sollte ich versuchen, die Elemente zu einer "Download-Warteschlange" hinzufügen und erlauben nur zwei gleichzeitig zu downloaden? – Craigt

Antwort

0

Im Code-Snippet geschrieben, scheinen Sie nicht, dass Sie

1

WebClient bieten keine Unterstützung vom Benutzer angegebenen Timeouts und (IIRC) ein Standard-Timeout von 100.000 msecs (100 schaffen die BitMap Objekte Entsorgung werden Sekunden). Versuchen Sie, länger als 100 Sekunden zu warten und sehen Sie, ob Sie Ausnahmen erhalten.

Wenn dies der Fall ist, müssen Sie wahrscheinlich die HTTPWebRequest- und HTTPWebResponse-Klassen anstelle von WebClient umgestalten und ein vernünftigeres Timeout konfigurieren.

Verwandte Themen