Archief - [c#] - Cross thread info

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

CyTron

Legacy Member
In mijn programmatje is het de bedoeling dat ik van een thread info uit een listbox haal maar krijg steeds een errormessage:
Cross-thread operation not valid: Control 'lstChannels' accessed from a thread other than the thread it was created on.

Info naar de thread sturen gaat, maar info ophalen vanuit de thread vind ik niet.

hij geeft de error bij dit stukje code:

Code:
string w = reader.ReadLine();
                    if (w.Contains("PRIVMSG " + lstChannels.SelectedItem.ToString()))  // << errormessage
                    {
                        this.Invoke(new UpdateLogCallback(this.Msg), new object[] { w });
                    }
                    else
                    {
                        this.Invoke(new UpdateLogCallback(this.Msg), new object[] { w });
                    }
deze code staat dus in de thread en moet de lstChannels kunnen aanspreken om daar een item uit te halen

iemnd een ide?

Krueger

Legacy Member
Ik denk dat je het kan oplossen op twee manieren.
Ofwel sla je in een variabele het geselecteerde item op, en verwijs je daarnaar. Dan moet je wel bij een selectieverandering telkens die variabele updaten uiteraard.

Een andere manier is om alle bovenstaande code te invoken. Dan voor je die code uit op de gui thread, en dan zou er geen probleem mogen zijn.

Da Turtle

Legacy Member
Een opmerking: je mag nooit vanuit een andere thread dan de GUI thread uw controls aanspreken. Niet om er iets in te zetten en niet om er iets uit te halen. Je moet altijd via invoke of een andere omweg werken. In .NET krijg je een Exception als je zoiets probeert, maar in Java krijg je die niet (toch niet wanneer ik mijn laatste Java project gemaakt heb). Je form kan raar beginnen doen als je dit doet. (Daarom hebben ze het in .NET verboden veronder stel ik)

Ik zie dat je hier al rekening houdt bij het loggen van berichten. Ik denk dat het in dit geval het gemakkelijkste is om een variabele bij te houden met de waarde van het huidige SelectedItem zoals Kreuger voorstelt.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan