Laden...

Foreach listViewItem in einem Workerthread

Erstellt von SPYMAN vor 10 Jahren Letzter Beitrag vor 10 Jahren 979 Views
Thema geschlossen
S
SPYMAN Themenstarter:in
1 Beiträge seit 2013
vor 10 Jahren
Foreach listViewItem in einem Workerthread

Hallo,

ich führe Code in einem Workerthread aus und möchte in diesem auch auf eine Control zugreifen. Ich weiß auch, wie man Controls invoked, jedoch weiß ich nicht, wie ich es bei einem foreach Loop machen soll.

Wird mein Code so ausgeführt wie unten, meckert er natürlich wegen Threadübergreifendem Zugriff.

Vielen Dank, für die Hilfe !

Hier ist mein Code :

lvStart = ListView

foreach (ListViewItem item in lvStart.Items) // <- Hier meckert er 
                        {
                            if (item.Tag == n.ToString())
                            {
                                

                                lvStart.Invoke((MethodInvoker)(() => lvStart.Items.Remove(item)));
                            }
                        }
C
258 Beiträge seit 2011
vor 10 Jahren

Warum willst du eine GUI aktion in einem WorkerThread ausführen?

Invokes erzeugen viel overhead dh. einmal invoken und die schleife wieder im GUI Thread ausführen.


this.Invoke(new Action(()=> 
{
foreach....
});

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo SPYMAN,

mit foreach geht es gar nicht, außer man verlagert das ganze foreach in den GUI-Thread, wie Console32 es gezeigt hat, denn kein GUI-Zugriff darf direkt aus dem Worker erfolgen, also auch nicht der auf lvStart.Items.

Aber natürlich kann man aus dem Worker einen Counter übergeben, welcher Item als nächstes geprüft werden soll. Allerdings sollte man mehrere Zugriffe zusammenfassen.

Aber das und auch ansonsten alles, was du wissen musst, steht in [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke).

Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 1.1.

herbivore

Thema geschlossen