2012-03-25 11 views
1

Ich versuche, mich C# zu lehren und zu starten, ich versuche, ein Programm zu konvertieren, das ich ursprünglich in Autoit schrieb.C# Webbrowser Navigation Links in der Reihenfolge

Ich benutze ein Windows-Antragsformular und das Programm soll ein oder zwei Links als Eingabe nehmen. Navigieren Sie zu diesen Seiten, greifen Sie einige Links aus einer Tabelle und besuchen Sie dann jede dieser Seiten, um Inhalte zu erhalten.

Wenn nur ein Link eingegeben wird, scheint er auf diese Seite zu gehen und die Links von einer Tabelle zu nehmen, wie es sein soll. Wenn zwei Links eingegeben werden, scheint es nur die Links von der zweiten Tabelle zu greifen.

Also, wenn zwei Links übergeben werden diese Methode

private void getPageURLList(string site1, string site2) 
    { 
     getPageURLList(site1); 
     getPageURLList(site2);   
    } 

die gleiche Methode aufruft, die aufgerufen wird, wenn nur gibt es einen Link

private void getPageURLList(string site) 
    { 
     webBrowser.DocumentCompleted += createList; 
     webBrowser.Navigate(site); 
    } 

Ich bin mir ziemlich sicher, dass das Problem ist „Navigieren“ wird ein zweites Mal aufgerufen, bevor createList das erste Mal startet.

Der Grund, warum ich WebBrowser verwende, ist, weil diese Seiten Javascript verwenden, um die Links in der Tabelle zu sortieren, so dass HTTPRequests und das HTMLAgilityPack nicht in der Lage sind, diese Links zu greifen.

Also meine Frage ist: Wie kann ich meinen WebBrowser von der Navigation zu einer neuen Seite halten, bis ich fertig bin, was ich auf der aktuellen Seite mache?

Antwort

0

Sie müssen eine Bool-Variable erstellen, um zu wissen, wann der erste Prozess abgeschlossen ist. Und dann starte den anderen. Application.DoEvents() wird Ihnen helfen.

Beachten Sie, dass alle diese Ereignisse im Hauptthread ausgeführt werden.

+0

Ich habe versucht, einen Bool zu verwenden, aber entweder hat es nicht funktioniert oder ich habe es an die falsche Stelle gesetzt. Ich muss in Application.DoEvents() nachsehen, ob das mein Problem behebt. – user1290695

+0

im Dokument abgeschlossen: jobDone = true; und im Code getPageURLList (site1); jobDone = false; während (! Jobdone) {ApplicationDoEvents();} getPageURLList (site2); suchen Sie es finden Sie es – ddarellis

+0

Diese scheint es behoben zu haben. Es führt beide Links. Es führt den zweiten Link ein zweites Mal aus, aber das ist wahrscheinlich ein Problem mit meinem Code. – user1290695

0

In Ihrem Dokument abgeschlossene Ereignis Sie Ihre Link-Verarbeitung. Am Ende der Link-Verarbei- tung navigierst du den Browser zur nächsten URL

Verwandte Themen