Beste devvers,
Normaliter doe ik niet zoveel met threading, hoogstens een bgworker waar er flink wat werk verzet moet worden en de UI moet blijven functioneren.
Nu zit ik met het probleem dat ik een soort 'listner' heb die voordurend in een while loop zit. Deze 'listner' is gewoon een method van een classe. Nu maak ik een nieuwe threat met New Thread(AddressOf Me.oKlasse.Start) [vb]... So far so good.
Het eerste wat in je op komt als je altijd singlethreaded werkt is natuurlijk gewoon een event maken in dat object met die listner (die we even klasse B noemen), deze raisen in je while loop en deze vanuit je hoofdobject (klasse A) afhandellen. Je geeft de data mee die je 'afgeluisterd' hebt the loop goes on...
Opzich werkt dat. Echter is het nu opeens zo dat de event handler die je in klasse A gedefineerd hebt opeens in object B uitgevoerd wordt...? Terwijl ik wel gewoon in mijn private membervelden van object A kom? Nu zou me dat ook niet opvallen allemaal eigenlijk -> tot je je private memberveld aan een UI control hangt, die komt dan opeens met een exception als "Het is niet toegestaan een bewerking uit te voeren via verschillende threads: er werd vanaf een andere thread toegang gekregen tot het besturingselement lbxLog dan de thread waarop het element is gemaakt."
Nu hoef ik uberhaubt niet met controls te werken want in deze app teken ik alles met managed directx, en ja ik weet dat je met CheckForIllegalCrossThreadCalls hier omheen kunt werken.
Maar hoe moet ik dit eigenlijk oplossen? Dan bedoel ik ook niet zo zeer het locken van data in een threat maar meer het doorgeven van 'berichten' tussen mijn threads dat er nieuwe data is...? Eigenlijk leggen de meeste .NET threading artiekellen die ik vind vooral de nadruk op processen die hun data doorgeven als ze klaar zijn.... Die van mij moet dat dus doen als er iets 'gebeurt'.
Edit: voor iedereen me naar de search verwijst (zie opeens veel over dit topic op GoT) ik wil hier dus geen BackgroundWorker gebruiken en ik heb niks met de UI te maken!
Normaliter doe ik niet zoveel met threading, hoogstens een bgworker waar er flink wat werk verzet moet worden en de UI moet blijven functioneren.
Nu zit ik met het probleem dat ik een soort 'listner' heb die voordurend in een while loop zit. Deze 'listner' is gewoon een method van een classe. Nu maak ik een nieuwe threat met New Thread(AddressOf Me.oKlasse.Start) [vb]... So far so good.
Het eerste wat in je op komt als je altijd singlethreaded werkt is natuurlijk gewoon een event maken in dat object met die listner (die we even klasse B noemen), deze raisen in je while loop en deze vanuit je hoofdobject (klasse A) afhandellen. Je geeft de data mee die je 'afgeluisterd' hebt the loop goes on...
Opzich werkt dat. Echter is het nu opeens zo dat de event handler die je in klasse A gedefineerd hebt opeens in object B uitgevoerd wordt...? Terwijl ik wel gewoon in mijn private membervelden van object A kom? Nu zou me dat ook niet opvallen allemaal eigenlijk -> tot je je private memberveld aan een UI control hangt, die komt dan opeens met een exception als "Het is niet toegestaan een bewerking uit te voeren via verschillende threads: er werd vanaf een andere thread toegang gekregen tot het besturingselement lbxLog dan de thread waarop het element is gemaakt."
Nu hoef ik uberhaubt niet met controls te werken want in deze app teken ik alles met managed directx, en ja ik weet dat je met CheckForIllegalCrossThreadCalls hier omheen kunt werken.
Maar hoe moet ik dit eigenlijk oplossen? Dan bedoel ik ook niet zo zeer het locken van data in een threat maar meer het doorgeven van 'berichten' tussen mijn threads dat er nieuwe data is...? Eigenlijk leggen de meeste .NET threading artiekellen die ik vind vooral de nadruk op processen die hun data doorgeven als ze klaar zijn.... Die van mij moet dat dus doen als er iets 'gebeurt'.
Edit: voor iedereen me naar de search verwijst (zie opeens veel over dit topic op GoT) ik wil hier dus geen BackgroundWorker gebruiken en ik heb niks met de UI te maken!
[ Voor 5% gewijzigd door Verwijderd op 11-02-2008 14:05 ]