Architecture Net


События - часть 2


//Event.cpp
fusing <mscorlib.dll>
using namespace System;
// использовать пространство имен Система,
[event_source(managed)] // управляемый
public _gc class ManagedEventSource
// класс сборщика мусора ManagedEventSource
{ public:
_event void ManagedEvent(} ; // нет реализации
void Fire_ManagedEvent()
{
ManagedEvent();
}
};
[event_receiver(managed)] // управляемый
gc class ManagedEventReceiver // класс сборщика мусора ManagedEventReceiver
{
public:
void HandleManagedEvent() // вызывается через ManagedEvent
{
Console::WriteLine("HandleManagedEvent called");
}
void HookEvent(ManagedEventSource *pEventSource)
{
_hook( // обработчик
SManagedEventSource::ManagedEvent,
pEventSource,
SManagedEventReceiver.:HandleManagedEvent) ,
}
void UnhookEvent(ManagedEventSource* pEventSource)
{
_unhook( // отцепиться
&ManagedEventSourсе::ManagedEvent,
pEventSource,
SManagedEventReceiver:HandleManagedEvent) ; }
};
void main ()
{
ManagedEventSource* pEventSource =
new ManagedEventSource;
ManagedEventReceiver* pReceiver =
new ManagedEventReceiver;
pReceiver->HookEvent(pEventSource) ;
pEventSource->Fire_ManagedEvent(); // вызывается обработчик


pReceiver->UnhookEvent(pEventSource);
}

Профамма напечатает:

HandleManagedEvent called


CompEbook.ru Железо, дизайн, обучение и другие




Начало  Назад  Вперед