19. september 2011 - 20:29Der er
6 kommentarer og 1 løsning
Eksekvere metoder på child threads?
Hej eksperter?
Hvordan eksekverer jeg metoder på objekter der eksisterer på child threads?
Jeg har en main thread hvorfra jeg starter X antal tråde (af samme metode). I hver tråd instantieres et object der har en instansmetode.
Hvordan kan jeg senere tilgå child tråden og eksekvere en metode på det objekt der kun eksisterer lokalt i tråden?
Jeg har forsøgt med et event som vist nedenfor, problemet er bare at det altid er main tråden jeg får fat i. Button1 starter en ny tråd og button2 fyrer et event. Når eventet fyrer skal listeners gøre et eller andet med objektet og udskrive deres trådID i en messagebox.
Når eventet fyrer (efter nye tråde er startet) er det alligevel kun main tråden der eksekverer koden og der sker derfor intet med objektet (da det jo kun eksisterer lokalt i de enkelte tråde).
Hvad overser jeg? Og er der en nemmere måde at gøre det på?
På forhånd tak
public class Main {
//event delegate public delegate void AddClientEventHandler();
//event public event AddClientEventHandler ClientAdded;
void StartThread() {
Object object = new Object();
//event listener this.ClientAdded += new AddClientEventHandler(delegate(){ object.doWhatever(); MessageBox.Show(Thread.CurrentThread.ManagedThreaId.toString()) });
Øh? Du kalder jo også kun din delegate fra din main-thread?
Men altså - du blander vist det hele lidt sammen. Det er ligemeget hvilken tråd du har oprettet instansen i. Det er i det context hvor kaldet bliver afviklet der er interessant (Og du kalder den fra din knap2's eventhandler).
Du kunne evt. lade din tråd lytte på en kø, hvorpå du lægger Tasks til afvikling. (eller bare instanser af delegates) Men det er stadig en lappeløsning.
Har du prøvet at kigge på: System.Threading.Tasks namespacet?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.