WebClient/Login Asynchron ausführen...

  • VB.NET

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Kangaroo.

    WebClient/Login Asynchron ausführen...

    Hallo zusammen

    Ich stehe momentan etwas auf dem Schlauch.
    Ich versuche eine Verbindung zu meinem Server aufzubauen für ein Login, was soweit auch recht gut funktioniert.
    Leider Friert mir dabei das Programm komplett ein was ich ja zu verhindern versuche.
    Ich wollte das ganze erst über Multithreading lösen, bin dazu aber wohl zu "blöde"...
    Ich habe das Problem das ich aus einem 2ten Thread heraus nicht mehr die zweite Form aufrufen kann und die gesamten benötigten Variablen übergeben kann.

    Hier mal ein wenig Code:

    VB.NET-Quellcode

    1. nv.Clear() nv.Add("user", log_usr.Text) nv.Add("pass", MD5StringHash(log_pw.Text))
    2. Dim uploadURL As String = ("http://6-zones.de/chat/login.php")
    3. Dim result() As Byte = wc.UploadValues(New System.Uri(uploadURL), "POST", nv) Dim resultstring As String = System.Text.Encoding.ASCII.GetString(result)
    4. If TextBox_msg.Text = "erfolgreich" Then
    5. Me.Loading_text.Text = "Starte Chat"
    6. Form1.UserName.Text = log_usr.Text Form1.Label1.Text = "Online"
    7. Form1.Label1.ForeColor = Color.Green
    8. Form1.Show() Me.Hide() End If


    Das ganze hab ich bereits versucht als Modul auszuführen (funktioniert, leider nicht asynchron), dann innerhalb eines Backgroundworkers(Funktioniert auch Asynchron, leider geht Form1 dann nicht auf) und
    als Thread(Problem dazu habe ich oben beschrieben).

    Vielleicht könnt ihr mir dabei helfen da ich hier im Forum des öfteren bereits gute Tipps und Ideen nachgelesen habe.
    Gruß
    Panics

    EDIT:// Habe Google und Boardsuche die letzten 4 Tage genutzt und auch einiges dazu gefunden...
    Leider hat mir nichts den Denkanstoß gegeben den ich wahrscheinlich benötige um das Problem gelöst zu bekommen.

    Den WebClient Asynchron auszuführen habe ich bereits versucht das Programm friert dennoch ein...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Panics“ ()

    Um Deine GUI nicht einfrieren zu lassen , musst Du (wie Du schon richtig erkannt hast) Deinen Vorgang ausserhalb des GUI-Threads durchführen. Dazu hast Du diverse Möglichkeiten
    - im Backgroundworker
    - in einem separaten Thread
    - per Async Request

    Diese hast Du zum Teil ja schon ausprobiert, Dein Hauptproblem scheint daher also weniger die Ausführung in einem Nebenthread zu sein, sondern die Kommunikation mit Deinen existierenden Forms.

    Der primäre Fehler der dabei immer gemacht wird: Forms in VB.NET haben eine Zwitter-Definition: zum einen sind sie eine Klasse, zum anderen kann man sie quasi auch als Instanz ansprechen.
    Das habe ich als 'Bequemlichkeitsfalle' in folgendem Thread beschrieben: [VB 2010] Update eines Labels durch einen Thread

    In einem Thread müssen explizit die Instanzen Deiner Forms verwendet werden, ansonsten macht VB.NET hier Blödsinn indem es eine eigene (ungewünschte) Instanz dieser Form anlegt.
    Ebenfalls müssen Updates von dem Thread auf GUI Elemente auch erst per Invoke geswitched werden.

    Wenn Du hier nicht weiterkommst, so schildere Dein Problem etwas genauer.

    Willkommen im Forum