Announcement

Collapse
No announcement yet.

Fortschrittsinformationen des VB-Skripts in Textfeld anzeigen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Fortschrittsinformationen des VB-Skripts in Textfeld anzeigen

    Hallo,

    ich bin fast am Ende meiner ASPX-Seite und hab noch ein kleines Problem:

    Vereinfacht gesagt wird ein Button geklickt und in XX.aspx.vb werden unter Button1_Click(...) mehrere Subs aufgerufen.
    (Powershell-Skript, nMap Scan, ...)
    Da die Subs bis zu 2 Minuten brauchen, versuche ich nach jedem Durchlauf eines Subs einen Status in einer Textbox
    auszugeben. Leider geht das ja nicht mit textbox1.text="Sub 1 von 5 fertig" :-(, da erst nach dem kompletten
    Abschluss von Button1_Click(...) die Textbox1 befüllt wird.

    Hatte bisher mehrere erfolglose Ansätze mein Prob zu lösen:
    - Response.flush()
    - UpdatePanel
    - subs in Javaskript-Funktion aufrufen

    Kann mir jemand mit meinem Problem weiterhelfen und mir ein Tip geben, in welche Richtung ich suchen muss?

    Danke schon mal im Voraus

  • #2
    Stichwörter "ASP.NET Progressindikator AJAX"



    Ein Workaround für klassiche ASP.NET Seite wäre alle deine Sub's auf ein WebService (WS) zu packen und zwar mit "One Way" Aufruf und IAsync Delegate.

    Stichwörter "WebService, One Way, IAsync, MetaRefresh"

    Dann wird noch eine Funktion benötigt, die IAsync.IsComplete überprüft.
    Nennen wir diese Funktion "MyStatus"

    "MyStatus" müss liefern entweder Ergebnis oder irgendeinen zeichen, der zeigt, dass Prozess noch nicht fertig/oder fertig ist, z.B. Int32 = -1 oder String="BUSY"/"oder FERTIG"/"oder READY" egal, dass solltest du selbst definieren.
    Auserdem braucht man noch eine WS-Funktion GetStepNumber.
    MyStatus müsste auch GetStepNumber setzen.


    Mit "One Way" Attribut von WS-Funktion wird die ASP.Seite auf den WS-Funktion Antwort NICHT warten.
    Somit wird Benutzer Interface nicht blockiert.
    IAsync lässt dein Sub nicht zwei mal Starten, solange Sub noch nicht fertig ist.

    Als nächstes muss man auf der ASP.NET Seite Metarefresh einschalten.
    Mit Metarefresh wird die Seite mit gegebenem Interwal , sagen wir mal 5 Sekunden, immer wieder Aufgeruft.



    Code:
    If MyProxyKlasse.Status = "READY"
    
    MyProxyKlasse.MyFunktion(MyParameter, 1) // Step 1
    
    ELSE IF MyProxyKlasse.Status = "BUSY"
    
    // es passiert einfach nichts
    
    ELSE IF MyProxyKlasse.Status = "FERTIG"
    
    LABEL1.Text = "Step " + MyProxyKlasse.GetStepNumber.ToString() + " is ok."
    
    MyProxyKlasse.MyFunktion(MyParameter, MyProxyKlasse.GetStepNumber +1)
    // nächster Step
    
    ELSE IF MyProxyKlasse.Status = "ALLE FUNKTIONEN sind FERTIG"
    
    Response.Redirekt("~/Ende.aspx") // Ende.Aspx hat kein Metarefresh
    
    END IF

    Sonst wie gesagt rescherschiere nach "ASP.NET Progressindikator AJAX"
    Zuletzt editiert von vadym voytas; 27.09.2010, 21:21.
    Bitte vergessen Sie nicht die Antwort zu bewerten. Danke.:-)

    Comment

    Working...
    X