#include "stdafx.h"
using namespace System;
using namespace System::Threading;
ref class MyEventArgs : EventArgs
{
public:
property String^ Info;
MyEventArgs(String^ info)
{
Info = info;
}
};
delegate void MyEventHandler(Object^ sender, MyEventArgs^ args);
ref class Events
{
public:
event EventHandler^ Start;
event EventHandler^ Exit;
void RaiseStartEvent()
{
Start(this, gcnew EventArgs());
}
void RaiseExitEvent()
{
Exit(this, gcnew EventArgs());
}
void OnStart(Object^ sender, EventArgs^ args)
{
Console::WriteLine("Starting");
}
void OnExit(Object^ sender, EventArgs^ args)
{
Console::WriteLine("Exiting");
}
};
void f(Events^ e)
{
e->RaiseStartEvent();
Console::WriteLine("Doing something.");
e->RaiseExitEvent();
}
int main()
{
Events^ events = gcnew Events();
// add the event handlers for Start and Exit
events->Start += gcnew EventHandler(events, &Events::OnStart);
events->Exit += gcnew EventHandler(events, &Events::OnExit);
f(events);
// remove the event handlers
events->Start -= gcnew EventHandler(events, &Events::OnStart);
events->Exit -= gcnew EventHandler(events, &Events::OnExit);
}