2010-06-22 63 views
4

我们如何在C#中使用回调函数我们如何在C#中使用回调函数

+0

你能举一个更具体的例子吗?你的问题太泛泛,无法回答。 – Oded 2010-06-22 10:05:24

+0

请更具体。 – 2010-06-22 10:05:57

+2

可能重复[什么是回调?](http://stackoverflow.com/questions/2139812/what-is-a-callback) – 2010-06-22 10:06:11

回答

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; 
... 

干杯, 亚当

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,