Avatar billede microjet Nybegynder
11. juni 2008 - 12:16 Der er 9 kommentarer og
1 løsning

Delegates - Hændelser dobles op!

Hejsa

jeg er kørt lidt fast og jeg ved heller ikke om det er den rigtige måde jeg har lavet det på. Det drejer sig om 3 DLL'er der skal arbejde sammen. En device.dll sender en kommando til Multiplexer.dll, som bestemmer hvilken port type der skal benyttes eks. COMport.dll

COMport.dll sender kommando til COMporten... så snart svaret kommer sendes det tilbage gennem alle DLL'er tilbage til applikationen.

Nogle komandoer kan godt forårsage at produktet der kommunikeres med sender data uafbrudt, som efterfølgende kontinuerligt skal sendes til applikationen!

PROBLEM: Når der sendes en kommando til komporten kommer svaret retur første gang som det skal, men anden gang jeg sender kommandoen kommer der 8 ens svar næste gang 27, 64, 125 og sådan bliver det ved hver gang jeg trykker på send knappen. Så det er ikke helt præcis en fordobling... Jeg tror det er fordi jeg skal stoppe abonnementerne, men når jeg har sendt en kommando, skal jeg jo have hul igennem tilbage konstant.Er der nogle der har et godt forslag


Koden kan des i dette dokument, hvor jeg med røde tal har prøvet at beskrive data forløbet http://www.h2opower.dk/DelegateProblem.doc

M.v.h
Avatar billede bvli Praktikant
11. juni 2008 - 12:21 #1
Hej.

Først - kunne du ikke bruge et simpelt tekstdokument til at lave eksempler i? Jeg har ikke Word installeret - og hvis jeg havde, ville jeg nok være ret påpasselig med at åbne tilfældige dokumenter fra nettet.

Hver gang du trykker på knappen, tilføjer du den metode (test) der skal afvikles når dit device får nye data.

Prøv at smide linien:

Device1.NewDeviceData += new HBDevice.DeviceDataDelegate(test);

- ind i din constructor i stedet for i click-eventhandleren.

/B :)
Avatar billede sherlock Nybegynder
11. juni 2008 - 12:27 #2
Og det gælder for dine delegates i alle klasserne.
Avatar billede microjet Nybegynder
11. juni 2008 - 13:08 #3
Ok! Jeg prøver at flytte dem til constructoren!

Hvordan retter man i sine indlæg??

Her er koden i TXT: http://www.h2opower.dk/DelegateProblem.txt
Avatar billede microjet Nybegynder
11. juni 2008 - 13:09 #4
Og iøvrigt tusind tak for de hurtige svar :-D
Avatar billede microjet Nybegynder
11. juni 2008 - 14:13 #5
Så har jeg flyttet dem op i constructor'en ... og nu virker det.. så tak for hjælpen

Jeg havde flytet dem der op på et tidspunkt, men kunne af en eller anden grund ikke få det til og virke dengang... linierne stod nemlig udkommenteret i constructor'en

Men tak for hjælpen... det er fedt at komme lidt videre :-D

Tue
Avatar billede bvli Praktikant
11. juni 2008 - 16:01 #6
Herligt :) Jeg smider et svar så!

/B
Avatar billede moykal Nybegynder
12. juni 2008 - 20:22 #7
Sekvensen er altså 1*1*1 efterfulgt af 2*2*2 -> 3*3*3 -> 4*4*4 -> 5*5*5... :-) ... men lidt af en starter-klassiker.... som den at kreere kontroller forfra i eventhandlere... hvilket jo godt kan gå (selvom det ikke er så godt, mm. der er en god grund til det - som et eksempel jeg sidder med)... men her glemmer folk så gerne at -= 'e eventhandlers... og så sker dispose ikke før program slut.
Avatar billede microjet Nybegynder
12. juni 2008 - 20:46 #8
Jeg ved ikke lige om du beskriver det jeg oplevede. Det der egentlig undre mig mest er at første gang en komando løber gennem systemet kommer der kun ét svar retur som ønsket, men næstegang kommer der 8... og gangen efter 27???

Da jeg flyttede abonnementet som "bvli" beskrev op i constructoren, blev det halveret til først 1 svar og herefter 4 og herefter mener jeg det var 9... Det undre mig bare at der ikke er så meget system i det... altså eks: 1, 4, 8, 16, 32 osv.

Men jeg fik løst to problemer her på forum på én dag, så det er jeg glad for... der går nok lidt tid før jeg selv kan øse af min erfaring :-) eftersom jeg stdig er rimelig grøn i C#... jeg har programmeret Delphi i mange år, men lige det her med Delegates er nyt for mig.

P.S. kan man rette i sine indlæg... hvis ja! Hvordan?
Avatar billede johny Nybegynder
14. juni 2008 - 13:45 #9
Der er faktisk system i det, bare ikke et du lige er opmærksom på.

1, 8, 27(, 64, 125 osv.) følger faktisk blot x^3, præcis som bvli skriver. Det nye mønster du nåede frem til, 1, 4, 9(, 16, 25, 36 osv.) er lidt det samme, den her gang bare kun x^2. Synes bare lige jeg ville påpege systemet, så du måske lettere kan forstå hvorfor din kode gjorde som den gjorde..:)
Avatar billede sherlock Nybegynder
15. juni 2008 - 18:29 #10
>> P.S. kan man rette i sine indlæg... hvis ja! Hvordan?

Nix :)
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