Forum » Programiranje » [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.
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.
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?
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 ::
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?
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 AccuLoadIIIMonitorZakaj???
detroit ::
Sorry nism bral:D če rabiš custom evente poglej kak delegate & events tutorial
, če je offtopic me deletej:)
, če je offtopic me deletej:)
Skero
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
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... :)
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 ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | c# - mssql kombinacija / problem pri zapisu row-a v bazoOddelek: Programiranje | 1598 (1407) | darkolord |
» | [c#] Vprasanje glede BackGroundWorker classa in spreminanja gui elementaOddelek: Programiranje | 784 (710) | Ericssony |
» | [c#] Vprašanje glede release verzije aplikacijeOddelek: Programiranje | 1483 (1307) | Ericssony |
» | Tezava pri instanciranju class-aOddelek: Programiranje | 1294 (1165) | KernelPanic |
» | [.NET ASP] Napaka : Specified cast is not validOddelek: Programiranje | 1119 (1072) | pinc |