08. maj 2013 - 23:00
Der er
3 kommentarer og
1 løsning
Kald funktion i specifik tråd
Jeg arbejder på at program der kommunikerer på en COMport.
Jeg arbejde kun i mere end én tråd, når dataRecieved-evented er triggered, så jeg vil spørge, om det i stedet for at rode frem og tilbage mellem threads, er muligt at sende data til, og kalde en funktion, som man tvinger til at køre i UI-tråden, så jeg er fri for at lave delegates for hvergang jeg skal manipulere med forms?
Invoke goer jo at "det" bliver koert i event traaden.
Men hvis du laver for meget i event traaden bliver UI ulidelig at bruge, saa jeg er ikke sikker paa at det er en god ide.
Og du kan jo bare Invoke med en lambda hver gang du skal opdatere UI.
02. september 2013 - 11:45
#4
Hmm... Jeg fik måske lige sagt ok lidt for hurtigt.
Det er et meget lille program, som fungerer som et simpelt interface til en analysator.
Jeg sender 4-8 bytes gennem en seriel port, og får et svar på 3-12 bytes. Svaret deler jeg lidt op i ACK/NAK, fejlkode, ETX/STX, [data], [ETX], og [BCC], alt efter hvordan svaret er bygget op. Ud fra de data, opdaterer jeg enkelte dele (1-2 controls pr. svar) af en meget lille form. Så når jeg får svaret, kalder jeg en funktion til at vurdere hvad der skal opdateres, og så bliver elementerne opdateret gennem en invoke.
Der er stort set ingen belastning ud over opdatering af UI-form, så tanken er at det er nemmere/hurtigere/pænere bare at kalde den lille funktion fra DataReceived eventet i UI-tråden, som alligevel laver en stor del af dens arbejde i UI-tråden. Selv hvis jeg skulle lave databehandling på event-tråden, ville jeg nu gerne have viden til at kalde en anden funktion på UI-tråden, som man så kan sende de behandlede data, og ud fra dem, opdatere de nødvendige dele af UI'en, uden at skulle lave et hav af invokes.
Jeg skal helt sikkert lære at arbejde i tråde, da jeg agter at lave større programmer i fremtiden, men det her er til praktisk brug, og alle de 'unødige' kald frem og tilbage mellem tråde, virker bare som et farligt rod, som giver unødigt mange fejlkilder, lige nu.