2016-04-09 5 views
-3

Ich muss eine Methode basierend auf der Sichtbarkeit des folgenden HTML-Elements ausführen.Überprüfen Sie diesen rekursiven Code in einem C# webbrowser Steuerelement

<div id="loading" style="height: 201px; width: 793px; visibility: hidden;"> 

Die Methode, die ich verwendete, um die Sichtbarkeitseigenschaft zu überprüfen, funktioniert einwandfrei.

public bool isloading() 
        { 
         string v; 

        v= webBrowser1.Document.GetElementById("loading").Style; 
        if (v.Contains("visible")) { return true; } 
        if (v.Contains("hidden")) { return false; } 
        else 
         return false; 

        } 

Ich benutze es so. Die App reagiert nicht mehr auf diesen Code. brauche Hilfe. Ich kann das Ereignis webbrowser1.documentcompleted nicht verwenden, da dies ein AJAX-Anruf ist. Meine einzige Option ist, das Attribut "Sichtbarkeit" zu überprüfen.

public void battleloop() 
        { 
         if (!isloading()) 
         { 
          universalclcikbutton(); 
         } 
         else 
         { 
          battleloop(); 
         } 
        } 

Ich möchte, dass die Schleife weiterhin isloading() prüft und universalclickbutton() ausführt; Immer wenn isloading() falsch ist. Ich weiß, dass es eine Methode innerhalb einer Methode aufruft. Würde mir bitte jemand Alternativen geben?

Die App friert ein, wenn es um den obigen Code geht, da es rekursiv ist, möglicherweise?

+0

Nein, die App friert ein, weil Sie in einer engen Schleife sind und es nie eine Chance geben, etwas anderes auszuführen. Aber es wird nicht für immer laufen, weil Sie schließlich eine 'StackOverflowException' bekommen. Du musst überdenken, dass du näher kommst. Prüfen Sie, ob es ein Ereignis gibt, das Sie abonnieren können, das ausgeführt wird, wenn das Laden abgeschlossen ist, und rufen Sie dann zu diesem Zeitpunkt Ihre Schaltflächenklickfunktion auf. –

+0

Ich bin der Meinung, dass es keine andere Veranstaltung gibt, die ich abonnieren kann (im Internet stundenlang). und ja, ich bin auf meinem Ansatz festgefahren. Gibt es eine Möglichkeit, dass wir das Attribut eines HTML-Elements die ganze Zeit überprüfen können und dann eine Methode ausführen, die auf der Änderung des Attributs basiert. Ich bin neu in der Programmierung, also bitte bitte mit mir :). – Dinesh

+0

Profi-Tipp: Wenn Sie Fragen stellen, verwenden Sie keine Großbuchstaben, verwenden Sie nicht alle fett, und fordern Sie nicht "so schnell wie möglich" Hilfe - es ist eine gute Möglichkeit, downvoted zu bekommen. – halfer

Antwort

0

Statt dessen Sie mithilfe while-Schleife

wie

while (!isloading()) 
{ 
    universalclcikbutton(); 
} 

versuchen können, so wird es automatisch isloading Funktion aufrufen.

+0

ah bekommen. mein Fehler. Werde den Post bearbeiten müssen, um die Methode in einer Endlosschleife auszuführen, bis ich auf eine andere Schaltfläche klicke. Ich habe auch diese While-Schleife ausprobiert. Ich möchte die Schleife beenden, wenn (isloading()) und agian Ich möchte die Methode aufrufen, die die While-Schleife in – Dinesh

+0

gemäß dem Code in ur Antwort ist, wird es nur einmal ausgeführt. ich möchte die Methode weiter ausführen, bis ich einen Knopf drücke (und natürlich, wenn isloading() = true ich nicht ausführen möchte, aber ich möchte, dass die Schleife fortfährt) – Dinesh

0

bekam meine Antwort. Es stellt sich heraus, dass ich eher ein Neuling bin als ich dachte. Ich habe gerade ein Timer-Steuerelement aus der Toolbox verwendet.

im timer_tick Ereignis i ausgeführt

private void timer1_Tick(object sender, EventArgs e) 
        { 
         if (!isloading()) { universalclcikbutton(); } 

        } 

und wenn ich wnated meine universalbuttonclick zu starten(); Methode habe ich timer.start(); und timer.stop(); um die Schleife zu stoppen. Am Ende stellte sich heraus, ziemlich einfach zu sein

Verwandte Themen