Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Foreach listViewItem in einem Workerthread
SPYMAN
myCSharp.de - Member



Dabei seit:
Beiträge: 1

Themenstarter:

Foreach listViewItem in einem Workerthread

beantworten | zitieren | melden

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)));
                            }
                        }
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von SPYMAN am .
private Nachricht | Beiträge des Benutzers
Console32
myCSharp.de - Member



Dabei seit:
Beiträge: 258

beantworten | zitieren | melden

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....
});
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers