Oznámení o události z DLL do Mainu – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Oznámení o události z DLL do Mainu – .NET – Fórum – Programujte.comOznámení o události z DLL do Mainu – .NET – Fórum – Programujte.com

 

trtkal0
Duch
24. 9. 2009   #1
-
0
-

Napsal jsem si kus kódu v C# (hraju si s ním teprve týden) pro ovládání sériového portu (příjem dat z GPS), ale všechno jsem to smažil do jedné třídy - konzolové aplikace. nyní jsem z toho vytahal jen potřebné věci pro DLL modul (jedna ovládací třída) a potřeboval bych, abych mohl nějak oznamovat hlavnímu projektu, že na seriovém portu jsou nová data.

Vybrat si pak data přes getry není problém, ale nevím, jak udělat, aby se Main vůbec dozvěděl, že si pro data má sáhnout.

V DLL/Třídě pro ovládání se o datech na sériovém portu dozvím takto a zavolám metodu spDataRecieved. Ale opravdu (nemám kloudné základy programování, natož pak OOP) nevím, jak nějak o tom dát vědět. Když bych to měl přímo v jedné třídě, tak to není problém, jelikož všechny potřebné věci doprogramuji do toho spDadaRecieved a v něm to budu přímo vypisovat (tak to bylo původně jako konzolový projekt)

                sp.Open();

sp.DataReceived += new SerialDataReceivedEventHandler(spDataRecieved);

Díky za jakékoliv postrčení/nakopnutí/kus kódu :). C# je první jazyk, který se mi začal konečně líbit (ač neumím programovat v ničem :( - všude jen naprosté základy ze školy) a nechtěl bych se tedy zaseknout na takovýchhle "banalitkách".

Prozatím jsem jen projížděl tutoriály zde na programujte.com + googlení když jsem věděl alespoň co přibližně hledat. Nyní jsem ani už nic nevygooglil (nevím co totiž hledat)

Nahlásit jako SPAM
IP: 213.180.46.–
Wizard0
Stálý člen
24. 9. 2009   #2
-
0
-

Osobne by som v DLL programoval iba funkcie/triedy, samotne primanie dat a ine volanie DLL funkcii by som presunul do programu.

Nahlásit jako SPAM
IP: 85.216.193.–
trtkal0
Duch
24. 9. 2009   #3
-
0
-

Díky za návrh.

Ovšem to my nevyřeší můj největší problém. Můžu to zapracovat přímo do programu, jenže chci dělat verzi pro PC/smarphone a CE, tedy budu muset 3× všude psát naprosto to samé. Při nějaké opravě to znamená opravu na 3 místech a znovu vše překompilovávat. Takhle by to znamenalo jen úpravu na místě jednom (tím pádem ztrácím největší výhodu knihovem a nemusím je v podstatě používat :)).

A i když bych to dal do programu přímo (když pominu to, že bych to naflákal vše do jedný třídy), tak opět vyvstává stejný problém, jak třídy "propojit" - dát o tom "vědět" do programu...
Přece je nesmysl všechno zakomponovávat přímo do formulářů a události vázat na akce prováděné v hlavním těle programu - to se naprosto vytrácí výhody modulárního programování - méně psaní, přehlednost, snazší správa, ...

Pokud bych nabízel nějakou službu, která by na venek měla vykonávat něco (např. celé API), tak bych jim při prodeji neřekl: tak tohle si doprogramujte sem, musíte posílat tyto data, ty přijmete odtud, pak je musíte protáhnout skrz vaší vlastní funkci a až po ní můžete použít funkci další a když to náhodou vyjde, tak to dejte do Našeho programu a ten vám výsledně spočítá správný výsledek :)
Chceme "prodávat" komplet, takže zákazník ve finále bude chtít slyšet: tady spustíte s parametry (kontruktoru), tahle funkce vám řekne že jsou data připravena a aktuální a pak už jen voláte data, který zrovna potřebujete :). To zní přece menohem líp :).

Nic jsem teda neprodával a ještě dlouho ani nemám v plánu, zda-li vůbec někdy - píšu to hlavně pro sebe :) a proto bych to chtěl mít tak nějak podle představ :). Nevím zda-li jsou reálné, ale nezdá se mi, že by takováhle programátorská "prkotina" se musela "natvrdo" zaprogramovávat do těla programu.

Nahlásit jako SPAM
IP: 213.180.46.–
KIIV
~ Moderátor
+43
God of flame
24. 9. 2009   #4
-
0
-

To trtkal : nevim jak v c#, ale v C nebo C++ bych to klidne resil predanim handleru funkce, ktera to ma zpracovat

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
PaLaDiN
~ Anonymní uživatel
30 příspěvků
24. 9. 2009   #5
-
0
-

Nadefinuj v tej triede v dll event. Ak chceš posielať aj nejaké konkrétne dáta tým handlerom, tak si môžeš jednoducho vytvoriť aj EventArgs class alebo to môžeš riešiť gettermi.

Nahlásit jako SPAM
IP: 147.232.163.–
dannyk0
Věrný člen
24. 9. 2009   #6
-
0
-

Presne tak, vytvor si event popripade i delegata a pri prijmu novych dat ho zavolas. A v mainu budes mit handler, ktery bude volan tim eventem a ve kterem si vyzvednes nova data apod.

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
trtkal0
Duch
24. 9. 2009   #7
-
0
-

Díky moc :)
Takovýhle nakopnutí bohatě stačí, něco už pošmudlám, z tohohle už vím co hledat :)

Nahlásit jako SPAM
IP: 213.180.46.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 40 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý