Cross-thread operation Fehler bei Dateilese-/Schreibvorgang



  • Guten Tag,
    ich schreibe an einem Programm welches eine Login Funktion beinhaltet. Um die Anmeldung dauerhaft zu vereinfachen möchte ich eine Cookiefunktion einbauen, die Datei mit dem Namen Cookie wird erstellt und beinhaltet folgende Informationen Login, Passwortash, Status der Speicherung, Status der Anmeldung.

    Zu Beginn wird geprüft ob die Datei vorhanden ist, ist das der Fall wird geschaut ob Anmeldeinformationen vorher schon einmal gespeichert wurden. Ist dies der Fall werden die ersten beiden Zeilen Login und Passworthash geladen, die letzte Zeile (4) übergibt die automatische Anmeldung am System mittels PerformClick. Und genau darin liegt mein Problem, in der Funktion welche die eigentliche Anmeldung startet befindet sich der Schreibvorgang welcher nach Prüfung der Anmeldeinformationen diese wieder in das Cookie zurück schreibt.

    Eine nicht behandelte Ausnahme des Typs "System.InvalidOperationException" ist in System.Windows.Forms.dll aufgetreten.

    Zusätzliche Informationen: Cross-thread operation not valid: Control '' accessed from a thread other than the thread it was created on.

    Das StringArray "cookie" steht global.

    if (File.Exists("cookie"))
                {
                    cookie = File.ReadAllLines("cookie");
                    if (cookie[2] != "login do not safe")
                    {
                        Login_Login_speichern.Checked = true; 
                        Login_Anmeldename.Text = cookie[0];
                        Login_Passwort.Text = "password"; //nur optisch nicht nötig damit Passwortfeld nicht leer erscheint
                        password = cookie[1]; //String password übernimmt Hash aus Datei
                    }
                    if (cookie[3] != "login off")
                    {
                        Login_Automatisch_anmelden.Checked = true;
                        Login_anmelden.PerformClick();
                    }
                }
    

    Nachdem nun der Nutzer sich anmeldet, Daten überprüft wurden sollen alle aktuellen Informationen in die Datei wieder geschrieben werden, solange beim Start der Anwendung nur Name, Passwort und Anmeldeinformationen übernommen werden funktioniert alles einwandfrei, erst beim automatischen Anmelden entsteht der Fehler.

    if (Login_Login_speichern.Checked == true)
                        {
                            Login_Automatisch_anmelden.Enabled = true;
                            cookie[0] = Login_Anmeldename.Text;
                            cookie[1] = password;
                            cookie[2] = "login safe";
                        }
                        else
                        {
                            cookie[0] = "name";
                            cookie[1] = "password";
                            cookie[2] = "login do not safe";
                        }
                        if (Login_Automatisch_anmelden.Checked == true)
                        {
                            cookie[3] = "login on";
                        }
                        else
                        {
                            cookie[3] = "login off";
                        }
                        File.WriteAllLines("cookie", cookie);
    

  • Administrator

    Lies doch die Fehlermeldung. Das Problem kommt nicht vom Lese- oder Schreibvorgang. Du probierst auf ein WinForm Control aus einem anderen Thread zuzugreifen. Das ist aber verboten. Themen im Netz gibt es dazu genügend.

    Ich nenne mal die folgenden zwei Stichwörter mit Links:
    Control.Invoke
    Control.BeginInvoke

    Damit kannst du eine Methode im Kontext des Threads aufrufen, welcher das Control erstellt hat.

    Grüssli


Anmelden zum Antworten