Laden...

Warten bis Webbrowser fertig geladen hat

Erstellt von xxtachxx vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.511 Views
Thema geschlossen
X
xxtachxx Themenstarter:in
13 Beiträge seit 2013
vor 10 Jahren
Warten bis Webbrowser fertig geladen hat

Hallo Leute,

ich habe ein kleines Problem mit dem Webbrowser.
Also ich möchte warten bis der Webbrowser fertig geladen hat.

Ich kenne schon das Event vom Webbrowser DocumentCompleted

Leider hilft mir das in diesem Fall (mit meinen Kenntnissen) nicht weiter



        void LoadQuellcodes()
        {
            foreach (string Album in AllAlben)
            {
                if (Album != "")
                {
                    wb.Navigate(Album.Split('|')[1]);

//Hier soll dann die Funktion hin wenn die Website fertig geladen ist

                }
            }
        }


Das Problem ist wenn ich mit dem DocumenCompletet Event arbeite das die Schleife weiterläuft selbst wenn die Website noch nicht fertig geladen hat.

Könnt ihr mir bitte helfen.
Ich möchte das Projekt gerne noch heute fertig bekommen 😁

173 Beiträge seit 2009
vor 10 Jahren

Hi,

du könntest den Quellcode etwas auseinander nehmen.

So ungefähr könnte es gehen (mal schnell hingetippt)


int postion = 0;

public void NextAlbum() 
{
    if(AllAlben.Count > postion) 
    {
         string Album = AllAlben[position];
          if (Album != "")
           {
                    wb.Navigate(Album.Split('|')[1]);
           }
          Position++;
    }
}

public DocumentCompleted(...) 
{
   NextAlbum();
}

U
189 Beiträge seit 2011
vor 10 Jahren
Hinweis von herbivore vor 10 Jahren

Wenn der folgende Code mit der while-Schleife im GUI-Thread ausgeführt wird, was er muss, weil direkt auf ein GUI-Element zugegriffen wird, würde das GUI blockieren, siehe [FAQ] Warum blockiert mein GUI? und [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke)

Die Verwendung DocumentCompleted hat also nicht nur Vorteile, sondern der Code mit der while-Schleife hat einen eklatanten Nachteil und sollte deshalb auf keinen Fall verwendet werden.

Wenn du mit unbedingt mit einer foreach arbeiten willst, in etwa so:


void LoadQuellcodes()
        {
            foreach (string Album in AllAlben)
            {
                if (Album != "")
                {
                    wb.Navigate(Album.Split('|')[1]);

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

                }
            }
        }

Ich würde aber mit dem Event DocumentCompleted arbeiten, und ohne foreach, viele Vorteile:


private void Main()
{
LadeersteSeite();
}
private void BrowserDocumentCompleted(object sender,
        WebBrowserDocumentCompletedEventArgs e)
{
DoStuffmitgeladenerSeite();
LadenächsteSeite();
}

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo xxtachxx,

in Windows Forms kann man keine Abläufe wie in Konsolenanwendungen programmieren. Davon sollte man sich so schnell wie möglich verabschieden. In Windows Forms muss man ereignisgesteuert programmieren, sonst läuft man immer wieder gegen Wände. Je schneller du dich da einarbeitest und daran gewöhnst, desto besser. Es ist lediglich anders, nicht schwieriger.

Das man in Windows Forms ereignisgesteuert programmieren muss, gehört allerdings zu den Grundlagen, siehe [Hinweis] Wie poste ich richtig? Punkt 1.1.1.

herbivore

Thema geschlossen