ComboBox von einem anderen Thread lesen

CopWorker

Erfahrenes Mitglied
Hallo,

ich versuche aus einer Windows Forms ComboBox den aktuell selektierten Text auszulesen.
Frage ich den Text direkt nach Event aus dem anderen Thread ab führt dies zu einer Exception.
Was auch logisch erscheint, da ich zu diesem Zeitpunkt des Ereignisses gar nicht sicher bin ob die Combobox gerade beschäftigt ist.
Denn die läuft ja in ihrem eigenen Thread.
C#:
string strRet = cmbServer.Text;

Beim Schreiben auf eine Combobox in dieser Situation verwende ich immer die .InvokeRequired Methode.
Das funktioniert.
Muss ich das beim Lesen aus der Combobox anders machen?

Mein Code dazu:
C#:
private string GetSelServerInfo()
{
    string strRet = string.Empty;

    //Message for "cmbServer"
    if (this.cmbServer.InvokeRequired)
    {
        MethodInvoker del = delegate { GetSelServerInfo(); };
        this.cmbServer.Invoke(del);
    }
    else
    {
        strRet = cmbServer.Text;
    }


    return strRet;
}

Grüße von CopWorker
 

Spyke

Premium-User
Invoke sollte auch beim lesen funktionieren.
Dein Problem ist eher das du hier mit einer Methode arbeitest die einen Rückgabe wert hat.
Über Invoke wird zwar deine Combo erstmal ausgelesen, aber er kann mit dem Rückgabewert nixs anfangen (macht damit nixs).
Da musst du dir da was anderes überlegen.

was du probieren könntest (ungetestet)
C#:
private string GetSelServerInfo()
{
    string strRet = string.Empty;

    //Message for "cmbServer"
    if (this.cmbServer.InvokeRequired)
    {
        MethodInvoker del = delegate { strRet = GetSelServerInfo(); };
        this.cmbServer.Invoke(del);
    }
    else
    {
        strRet = cmbServer.Text;
    }


    return strRet;
}
siehe Zeile 8,
ich setzte in der anonymen Methode strRet, damit dieser dann zurückgegeben werden kann.
Bei anonymen Methoden hat man zugriff auf die Variablen der ausgehenden/übergeordneten Methoden.
Das machen wir uns zu nutze und setzen diese.
Könnte funktionieren.
 
Zuletzt bearbeitet: