Auf Listbox-Subitem von anderem Thread zugreifen



  • Hi,

    ich habe gerade folgendes Problem:

    Ich hab in meiner Form einige Textboxen und eine ListView und starte irgendwann einen zweiten Thread. In diesem Thread greife ich dann z.b. auf eine Textbox zu um mir den Text zu holen:

    while (ButtonStart)
    {
        for (int i = 0; i < this.ListView_Liste.Items.Count; i++)
        {                  
            string Name = TextBox_Name.Text;
        }			
    }
    

    Das funktioniert.

    Greife ich allerdings auf ein Subitem der ListView zu:

    while (ButtonStart)
    {
        for (int i = 0; i < this.ListView_Liste.Items.Count; i++)
        {                  
            string Kauf = ListView_Liste.Items[i].SubItems[1].Text;
        }			
    }
    

    Fehlermeldung: Ungültiger threadübergreifender Vorgang

    Die Textbox sowie die ListView stehen auf public. Also dachte ich mir, ich braucht wohl doch ein Invoke, also:

    while (ButtonStart)
    {
        for (int i = 0; i < this.ListView_Liste.Items.Count; i++)
        {                  
            ListView_Liste.Invoke(new MethodInvoker(delegate()
            {
            string Kauf = ListView_Liste.Items[i].SubItems[1].Text;
            }));
        }			
    }
    

    Problem: Er springt überhaupt gar nicht in die Invoke rein!

    ???
    Weiß jemand was ich falsch mache?



  • Hallo,

    du hast bereits Glück, dass du nicht schon bei Zugriff auf die ListView-Items eine Exception um die Ohren geworfen bekommst. Wie du korrekt festgestellt hast dürfen Control-Zugriffe nur im UI Thread passieren. Auch dass die Schleife durchlaufen wird, ist reines Glück.

    Gib eine eigene Liste in den Thread und nicht das ListView.


Log in to reply