webForumDet fria alternativet

Trådar och events

.NET

3 svar · 409 visningar · startad av Nickemannen

Medlem sedan aug. 20003 575 inlägg
Frågan#1

Hej jag sitter lite med trådar,

Jag har skapat en tråd som arbetar på ett objekt som triggar events lite då och då.

Dessa vill jag att de skall fångas upp av den tråden som skapade tråden som arbetar på objektet (huvudtråden).

Detta för att längre upp i arkitekturen enkelt kunna skicka vidare dessa event och tills det till slut hamnar i ett formulär där det måste vara huvudtråden som triggat eventet.

Jag gör detta för att jag vill ha en ansyctron metod anrop, detta fungerar ju utmärkt på WebClient.DownloadDataAsync() jag är ute efter något liknande och har kommit långt men hur gör jag så att det är maintråden som triggar eventsen?

Medlem sedan maj 20012 812 inlägg
#2

nickemannen skrev:

Detta för att längre upp i arkitekturen enkelt kunna skicka vidare dessa event och tills det till slut hamnar i ett formulär där det måste vara huvudtråden som triggat eventet.

Du behöver inte "fånga upp" eventen på huvudtråden, det enda som du måste göra i "huvudtråden" är om du vill binda data till dina kontroller, och det är faktiskt inte så att det måste vara huvudtråden, utan det är så att den tråd som har skapat en kontroll skall också sköta hanteringen av denna kontrol, men i 99,999999% av fallen så är det huvudtråden som skapar kontrollerna.

Det du gör är att på varje kontrol så finns det en InvokeRequired properties och så finns det en BeginInvoke method som du skall använd dig av för att få kontrollen att hanteras i rätt tråd.

- M

Medlem sedan aug. 20003 575 inlägg
#3

Okej, jag kikade lite på Invoke igår för att jag hade för mig det var något sådant.

Men jag är ändå nyfiken på hur Microsoft har löst det på WebClient, där behöver man inte tänka på detta utan eventen triggas i main tråden verkar det som iallfall eftersom det fungerar. Jag hade tyckt att det hade varit en snyggare lösning, för jag vill egentligen inte behöva tänka på detta.

Men jag antar att detta kanske kan lösa genom att skapa det objekt på lägre nivå som skall ha en annan tråd som arbetare att göra att man kan använda begininvoke på den så kanske man kan lösa det längre ner.

Men vilket objekt skall man ärva av för att få den funktionaliteten, jaja får gräva ner mig i msdn och kolla på alla klasser som control ärver av.

Medlem sedan aug. 20003 575 inlägg
#4

BackgroundWorker var svaret på mina problem, med den inkapslad så fick jag den funktionalitet jag ville.

267 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
141 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)