我们如何在C#中使用回调函数我们如何在C#中使用回调函数
4
A
回答
4
我认为您在寻找的是“代表”。例如:
public MyClass
{
public delegate void MyCallback(object sender, string MyArg);
public string DoSomeWork(string Foo, MyCallback mcb)
{
mcb(this, Foo);
return Foo;
}
}
您也可以使用委托来定义事件。例如,如果你想在MyClass的事件称为“OnMyCallback”,用它定义:
...
public event MyCallback OnMyCallback;
...
干杯, 亚当
1
这里How to write callbacks in C# and .NET
看看如果你正在寻找异步方法回拨,那么How to call a Visual C# method asynchronously 肯定会帮助
0
或者你是在谈论C# .NET event handlers(扩大代表的答案)?
2
将问题解读为:“我想从C#调用本地C++回调函数”。
您需要在边界的托管/ C#端创建一个委托。
C++:
DECLARE_CALLBACK(SampleChannelCallback, void, (void* ptr, uint id, void* data));
C#:
[UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)]
delegate void NativeCallbackDelegate(IntPtr ptr, uint id, IntPtr data);
如果使用SWIG创建本机的包装,那么后续添加到您的SwigUtil.h
。
#if defined(SWIG)
// Callback declare macro allows for SWIG to automatically construct a macro for a target language for the macros
#define DECLARE_CALLBACK(NAME, RETURNTYPE, PARAMS) typedef void* NAME; %callback_typemap(NAME)
#else
#define DECLARE_CALLBACK(NAME, RETURNTYPE, PARAMS) typedef RETURNTYPE (NAME) PARAMS
#endif
由于您的问题不是很清楚,我会将其留在那里。如果你想了解更多信息,请在评论中提问。
HTH,
你能举一个更具体的例子吗?你的问题太泛泛,无法回答。 – Oded 2010-06-22 10:05:24
请更具体。 – 2010-06-22 10:05:57
可能重复[什么是回调?](http://stackoverflow.com/questions/2139812/what-is-a-callback) – 2010-06-22 10:06:11