Avatar billede cr2000 Nybegynder
27. december 2005 - 12:41 Der er 7 kommentarer og
1 løsning

Method eksekveres i forkert thread.

Hej Eksperter :)

Jeg sidder og roder med et lille program der via Socket.Receive modtager nogle kommandoer som skal eksekveres.

Her kommer problemet.

Jeg har et thread method som jeg har valgt at kalde ReceiveThread hvor den står og blokker via Socket.Receive
Den står og modtager bytes og når der er kommet en "hel" kommando igennem skal den kalde et method jeg har valgt at kalde ProcessCommand

Det hele virker også meget fint. Men det giver en masse problemer at ProcessCommand bliver eksekveret med ReceiveThread'en og ikke min main thread.

Jeg har læst mig igennem en masse om events og delegates men systes ikke rigtigt jeg kan få løst mit problem.

Jeg håber der en en løsning på dette.

Mvh Christian
Avatar billede arne_v Ekspert
27. december 2005 - 14:00 #1
Hvis det er GUI opdatering så skal du igang med noget Invoke.

Til alt andet burde det ikke gøre noget at det kører i receive tråden, bare
du har en reference til det objekt som main tråden kører, så du kan bruge dens
metoder.
Avatar billede cr2000 Nybegynder
27. december 2005 - 14:05 #2
Som jeg har gjort det nu har jeg lavet sådan at Process kalder sig selv via invoke hvis invokeRequired.

Men jeg syntes bare ikke det er en særligt pæn løsning.

Kan jeg Handle event i main tråden som jeg har raised med Receive tråden?
Avatar billede cr2000 Nybegynder
27. december 2005 - 19:45 #3
Der må være en måde hvorpå jeg kan kører en thread der skyder events af i en anden thread.

Hva gør en Timer f.eks? Det fryser jo ikke hele formen mellem onTick. Og OnTick bliver kørt i main thread... How?
Avatar billede cr2000 Nybegynder
27. december 2005 - 20:42 #4
Fandt så også lige ud af at en system.windows.forms.timer ikke kan køre uden en form og at system.threading.timer laver samme problem med at eksekvere method'sne i en anden thread.


Nogle foreslag til hvordan jeg kan omgåes dette?
Avatar billede fufan Nybegynder
29. december 2005 - 00:57 #5
Jeg er ikke lige helt sikker på at jeg snakker om det rigtige... Måske er det lidt sent nu!

Men prøv tilføje denne kode til din constructor og se om det ikke hjælper;

CheckForIllegalCrossThreadCalls = false;
Avatar billede cr2000 Nybegynder
29. december 2005 - 09:43 #6
Tja... Det ville ihvertfald gøre at jeg ikke fik advarslen. Men det laver ikke om på at funktionen køre i en anden thread.

Indtil vidre har jeg brugt min mainform's invoke til at køre den i main thread'en.
Og jeg så kan løbe ind i at skal behandle nogle kommandoer inden formen er oprettet er så noget skidt.
Avatar billede cr2000 Nybegynder
20. april 2010 - 10:59 #7
haps
Avatar billede Syska Mester
20. april 2010 - 17:06 #8
og hvad var løsningen ?
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester