Laden...

Forenbeiträge von oliverp19 Ingesamt 5 Beiträge

16.01.2009 - 13:24 Uhr

...danke Leute für eure Idee. Die Lösung mit der Queue klingt vernünftig. Sobald ich Zeit habe, werde ich mich mal daran versuchen und mich ggf. hier melden.

Schönes Wochenende 😃

Grüße
Oli

15.01.2009 - 13:53 Uhr

Hallo,

Hmm.. und mit was für einer Exception?

keine Exceptions...das Programm reagiert einfach nicht mehr (keine Rückmeldung).

Dafür bräuchtest du ja trotzdem Threads da wenn ein Thread hängt es keine Möglichkeit mehr gibt in selbigem einen Timeout festzustellen um ihn dann zu beenden.

das scheint mir irgendwie das dilemma zu sein...

Ich möchte einfach Screenshots von einer größeren Anzahl Webseiten machen. Der Input kommt aus einer XML-Datei. Prinzipiell funktioniert eigentlich alles...bis auf 2 Hauptprobleme:

  • wenn eine Webseite nicht geöffnet werden kann, gibt es kein Timout...die Anwendung friert ein

  • bei einer großen Anzahl von Webseiten wird die oben gezeigte Methode direkt nacheinander für alle Webseiten aufgerufen und nicht sequentiell abgearbeitet, wie es eigentlich gedacht war...dann wird für 100 Seiten auf DocumentLoaded-Event gewartet, was leicht dazu führt, dass die Applikation einfriert.

An dieser Stelle komme ich einfach nicht weiter...hat da jemand Hinweise, wie ich sowas angehen könnte?

Grüße
Oli

14.01.2009 - 21:51 Uhr

moin,

ich muss mich doch nochmal melden 😃

Die Anwendung läuft zwar nun prinzipiell so, wie sie soll...nur ist sie sehr instabil. heißt: sie stürzt regelmäßig ab. nun wüsste ich gern, wie ich das ganze etwas stabiler hinbekommen könnte...ich hatte folgende ansätze:

  • auslagern der screenshot-methode in threads (threadpool)
  • festlegen eines timeouts für die screenshot-methode

letzteres erscheint mir zunächst einfacher zu implementieren, allerdings konnte ich da im netz nicht wirklich was sinnvolles finden. hat da evtl. jemand nen tipp für mich, wie ich einen timout in meine methode (siehe oben) integrieren könnte?

wäre die thread-methode sinnvoll? also mehrere threads parallel die screenshots machen zu lassen? ich habe gelesen das webbrowser-objekt ist relativ resourcenlastig.

Dank & Grüße
Oli

11.01.2009 - 12:41 Uhr

Vielen Dank! Das hat tatsächlich geholfen...so konnte ich diese komische while-Schleife eliminieren. Hier der Code für die Nachwelt:


            WebBrowser wb = new WebBrowser();
            wb.ScrollBarsEnabled = false;
            wb.ScriptErrorsSuppressed = true;
 
            wb.Navigate(url);

            wb.DocumentCompleted += delegate(object o, WebBrowserDocumentCompletedEventArgs e)
            {
                if (e.Url == wb.Url)
                {
                    wb.Width = 1024;
                    wb.Height = 768;

                    Bitmap bitmap = new Bitmap(wb.Width, wb.Height);
                    wb.DrawToBitmap(bitmap, new Rectangle(0, 0, wb.Width, wb.Height));
                    wb.Dispose();
                }

            };

Grüße
Oli

11.01.2009 - 00:28 Uhr

Moin,

ich spiele gerade ein wenig mit C# rum und möchte von einer Webseite einen Screenshot erstellen. Das klappt prinzipiell auch. Bei einigen Seiten (nicht allen) öffnen sich aber unendlich viele IE-Fenster und ich habe keine Ahnung wieso.

Ich bin noch rechter Anfänger, was C# betrifft...das sollte noch erwähnt werden 😃

Hier mal das Code-Snippet (im Netz gefunden):


WebBrowser wb = new WebBrowser();
wb.ScrollBarsEnabled = false;
wb.ScriptErrorsSuppressed = true;

wb.Navigate(url);

while (wb.ReadyState != WebBrowserReadyState.Complete) { 
  Application.DoEvents();
}

wb.Width = 1024;
wb.Height = 768;

Bitmap bitmap = new Bitmap(wb.Width, wb.Height);
wb.DrawToBitmap(bitmap, new Rectangle(0, 0, wb.Width, wb.Height));
wb.Dispose();


Das Ganze funktioniert, wie schon gesagt, bei vielen URLs ohne Probleme. Eine URL, bei welcher der Fehler auftritt ist beispielsweise "http://www.mal-was-liebes.de". Wenn ich Application.DoEvents(); auskommentiere, öffnen sich zwar keine 1000 IE-Fenster, aber die Prozessorlast geht hoch und das Programm stürzt ab.

Wie könnte ich sonst noch vernünftig abfragen, ob der Browser fertig ist mit dem Laden des Dokumentes.

Vielen Dank & Grüße
Oli