using namespace System;
using namespace System::Runtime::InteropServices;
using namespace msclr;
public ref class CManaged
{
public:
delegate bool CallbackHandler(int);
// For user to register handler
event CallbackHandler^ OnCallback
{
void add(CallbackHandler^ handler)
{
lock lockEvents(this);
m_callback = (CallbackHandler^) m_callback->Combine(m_callback, handler);
}
void remove(CallbackHandler^ handler)
{
lock lockEvents(this);
m_callback = (CallbackHandler^) m_callback->Remove(m_callback, handler);
}
protected:
bool raise(int n)
{
bool ret = true;
for each(CallbackHandler^ handler in m_callback->GetInvocationList()){
ret = ret && handler->Invoke(n);
}
return ret;
}
}
private:
CallbackHandler^ m_callback;
public:
CManaged()
{
}
~CManaged()
{
}
bool InvokeCallback(int n)
{
if(m_callback)
return m_callback->Invoke(n);
return false;
}
bool Callback(int n)
{
printf("%d\n", n);
return true;
}
};
int main(array ^args)
{
CManaged^ c = gcnew CManaged;
c->OnCallback += gcnew CManaged::CallbackHandler(c, &CManaged::Callback);
c->OnCallback += gcnew CManaged::CallbackHandler(c, &CManaged::Callback);
c->InvokeCallback(1);
c->InvokeCallback(2);
return 0;
}
No comments:
Post a Comment