Webrequest & GUI Refresh (Threading?)

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von cipherwar.

    Webrequest & GUI Refresh (Threading?)

    Hallo,

    ich habe ein Problem mit dem Refresh der GUI. Mein Programm soll eine Anzahl von Webseiten aufrufen und die zurückgelieferten Responses in einer Datei speichern. Darüber hinaus soll der Benutzer in einer Textbox (tbLog) informiert werden, welche Website grade bearbeitet wird und er soll die Möglichkeit haben, mit einem "Abbruch"-Butten den ganzen Vorgang zu beenden, wenn er keine Lust mehr hat zu warten.

    Wenn ich nun nach einen Button-Click in einer Schleife nach und nach alle Seiten abfrage kommt es dazu, dass dann zwar die Websites abgefragt werden und auch die Speicherung erfolgt, allerdings kann ich während der gesamten Zeit überhaupt keine Interaktion mit meiner GUI mehr vornehmen.

    Das ist insofern dumm, als ich weder dem User in meiner textbox tbLog darüber informieren kann, welcher Request grade verarbeitet wurde, als ich auch nicht den "Abbruch"-Button drücken kann, um den Prozess zu stoppen , wenn es zu lange dauert.

    Ich habe nun die Anweisung Me.Refresh() auf die GUI angesetzt, aber das bringt auch nichts. Dann habe ich was über Threading gelesen, aber sämtliche Beispiele die ich gefunden habe, erscheinen mir extrem komplex und für meine Zwecke überdimensioniert.

    Hier sind die wesentlichen Schnipsel meines Quellcodes:
    1) Anstoß der Funktionalität

    Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Me.tbLog.Clear()
    3. Dim zaehler As Integer
    4. Do Until (zaehler = 20)
    5. Dim antwortseite As String
    6. antwortseite = getResults("http://localhost/antiquartwo/test-params.php", "field-keywords=ASP.NET 2.0")
    7. ' todo: verarbeiten der antwortseite
    8. ' anzeige der response in der GUI
    9. Me.tbLog.Text &= antwortseite
    10. zaehler = zaehler + 1
    11. Loop
    12. Me.Refresh()
    13. End Sub


    2) Die Funktion, die die Websites mit einem POST-Request anfordert:

    Quellcode

    1. Function getResults(ByVal portalURI As String, ByVal suchbegriff As String) As String
    2. Dim uri As New Uri(portalURI)
    3. 'Dim data As String = "field-keywords=ASP.NET 2.0"
    4. Dim data As String = suchbegriff
    5. Dim request As HttpWebRequest = HttpWebRequest.Create(uri)
    6. request.Method = WebRequestMethods.Http.Post
    7. request.ContentLength = data.Length
    8. request.ContentType = "application/x-www-form-urlencoded"
    9. Dim writer As New StreamWriter(request.GetRequestStream)
    10. writer.Write(data)
    11. writer.Close()
    12. Dim oResponse As HttpWebResponse = request.GetResponse()
    13. Dim reader As New StreamReader(oResponse.GetResponseStream())
    14. Dim tmp As String = reader.ReadToEnd()
    15. oResponse.Close()
    16. 'Response.Write(tmp)
    17. getResults = tmp
    18. End Function


    Kann mir jemand einen Tipp geben bzw. den Codeschnipsel ergänzen?

    Gruß,
    cipherwar