Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Shared Custom Event, come posso fare?
Forum - C# / VB.NET - Shared Custom Event, come posso fare?

Avatar
Question (Normal User)
Rookie


Messaggi: 58
Iscritto: 14/12/2010

Segnala al moderatore
Postato alle 17:45
Domenica, 03/04/2011
Salve a tutti,
avrei necessita di eseguire degli eventi in modo thread safe e per farlo ho deciso di usare i custom events.
Sinché si parla di eventi d'instanza è tutto apposto ma i problemi sorgono con quelli condivisi, infatti non ho la minima idea di come strutturare il codice...

Questo è un esempio senza eventi shared (il codice si spiega meglio così che a parole):
Codice sorgente - presumibilmente VB.NET

  1. Public Delegate Sub MyEventHandler(ByVal sender As Object, ByVal e As MyEventArgs)
  2. Private MyEventDelegate As MyEventHandler
  3. Public Custom Event MyEvent As MyEventHandler
  4. AddHandler(ByVal value As MyEventHandler)
  5. MyEventDelegate = DirectCast( [Delegate].Combine(MyEventDelegate, value), MyEventHandler)
  6. End AddHandler
  7.  
  8. RemoveHandler(ByVal value As MyEventHandler)
  9. MyEvent = DirectCast( [Delegate].RemoveAll(MyEventDelegate, value), MyEventHandler)
  10. End RemoveHandler
  11.  
  12. RaiseEvent(ByVal sender As Object, ByVal e As MyEventArgs)
  13. MyEventDelegate.Invoke(sender, e)
  14. End RaiseEvent
  15. End Event



Come si può vedere tutto quello che faccio è giocare con un oggetto delegate, ma come scrivo il codice statico? :om:

P.S. MyEventArgs è una classe definita da me

Ultima modifica effettuata da Question il 04/04/2011 alle 13:12
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
2
Down
V
Segnala al moderatore
Postato alle 12:49
Lunedì, 04/04/2011
Un metodo statico non può riferirsi a membri d'istanza ma solo a membri statici. Allo stesso modo, un evento statico può riferirsi solo a membri statici. Perciò devi rendere quel delegato anch'esso statico. Per conservare la tua sanità mentale, ti suggerisco di usare un blocco SyncLock, un Mutex o un Semaphore per limitare l'accesso concorrente al delegato condiviso.

ma che senso avrebbe? Voglio dire, se nell'addhandler aggiungo dei valori al mio oggetto delegate statico quando poi andrò a chiamare il raisevent questi valori non ci saranno :S - Question - 04/04/11 13:13
PM