» »

[c#] Vprasanje glede eventov

[c#] Vprasanje glede eventov

KernelPanic ::

Spostovani soforumasi!

Imam dll in gui aplikacijo, ki preko dll komunicira z napravo. Sedaj bi rad dll nadgradil z sledeco funkcionalnostjo: Namrec, dll pobira podatke iz naprave, in ko je nov podatek na voljo, bi rad sprozil event newDataArrived, ki bi ga nato ujel v gui aplikaciji. Kako naj to storim? newDataArrived mora v gui prenesti tudi podatke, ki sem jih prejel iz naprave.

S spostovanjem in vnaprej se zahvaljujem za pomoc,
M.

Senitel ::

Sprejme ta tvoj dll kakšne callback metode?

Looooooka ::

v dllju mas verjetno class, ki ma potrebno kodo za to komuniciranje z napravo...v "gui" aplikaciji pa instanco tega classa?
se prav moras v classu samo dodat event in ga dvigat ko dobis podatke...v "gui" aplikaciji se pa pac subscribas na ta event in nekaj nardis ko se dvigne.
kje tocno je problem?

KernelPanic ::

Looooooka je izjavil:

v dllju mas verjetno class, ki ma potrebno kodo za to komuniciranje z napravo...v "gui" aplikaciji pa instanco tega classa?
se prav moras v classu samo dodat event in ga dvigat ko dobis podatke...v "gui" aplikaciji se pa pac subscribas na ta event in nekaj nardis ko se dvigne.
kje tocno je problem?

Ja luka, tocno to rabim, ampak ne vem, kako to narest, mas kaki link do "barebone" primera?

xordie ::

Kot je Senitel omenil - uporabi callback. V c# je to "delagete", ce se ne motim.
x

KernelPanic ::

No pa probam, tukaj je koda, najprej dll:
namespace AccuLoadIIICommDll
{
    public class DeviceFunction
    {
        public delegate void newTransactionArrived(object sender,
            Transaction e);
        public event newTransactionArrived transactionArrived;

        protected virtual void OnTransactionArrived(Transaction t)
        {
            if (transactionArrived != null)
                transactionArrived(this,
                    t);
        }...
, tukaj je GUI del za lovljenje eventa:
            this.m_CoreFunctions[0].transactionArrived +=
                new System.EventHandler(DeviceFunction.newTransactionArrived(FormMain_transactionArrived()));
in ko dam prevajat, mi vrne sledeci error:
Error 1 Non-invocable member 'AccuLoadIIICommDll.DeviceFunction.newTransactionArrived' cannot be used like a method. D:\Projects\AccuLoadIIISolution\AccuLoadIIIMonitor\FormMain.cs 78 56 AccuLoadIIIMonitor
Zakaj???

KernelPanic ::

Nihce mi ne zna pomagati? Pa tako se mi mudi ... :'(

detroit ::

Sorry nism bral:D če rabiš custom evente poglej kak delegate & events tutorial
, če je offtopic me deletej:)
Skero

KernelPanic ::

Saj sem gledal, pa isto naredil, pa mi ne dela ... :'(

vojko20 ::

probal brez "DeviceFunction.newTransactionArrived("
torej:

this.m_CoreFunctions[0].transactionArrived += new System.EventHandler(FormMain_transactionArrived);

drugače pa, če delaš v Visual Studiu samo napiši

this.m_CoreFunctions[0].transactionArrived += [prtisni tab][tab]

in ti bo sam zgeneriral kodo

Looooooka ::

problem je verjetno v tem, da si event definiral z dvema parametroma...prvi je object drugi pa pac nek objekt tipa transaction.
tko da tud tole verjetno ne bo delovalo:
this.m_CoreFunctions[0].transactionArrived += new System.EventHandler(FormMain_transactionArrived);
bos moral dat verjetno += new AccuLoadIIICommDll.DeviceFunction.newTransactionArrived( ...


plus...se en manjsi popravek:
protected virtual void OnTransactionArrived(Transaction t) {
if (transactionArrived != null)
transactionArrived(this,t);
...

dobra praksa je da prej nardis znotraj funkcije eno referenco na tale handler:
AccuLoadIIICommDll.DeviceFunction.newTransactionArrived check = transactionArrived;
if(check!=null)
{
check(this,t)
....

se posebej ce obstaja moznost, da ti kksn drug thread al pa kdorkoli vmes odstrani tist subscription na event.
potem dobis tak lep NullRefrenceException... :)


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

c# - mssql kombinacija / problem pri zapisu row-a v bazo

Oddelek: Programiranje
121452 (1261) darkolord
»

[c#] Vprasanje glede BackGroundWorker classa in spreminanja gui elementa

Oddelek: Programiranje
6713 (639) Ericssony
»

[c#] Vprašanje glede release verzije aplikacije

Oddelek: Programiranje
51333 (1157) Ericssony
»

Tezava pri instanciranju class-a

Oddelek: Programiranje
61188 (1059) KernelPanic
»

[.NET ASP] Napaka : Specified cast is not valid

Oddelek: Programiranje
61053 (1006) pinc

Več podobnih tem