我们如何在C#中使用回调函数
答案 0 :(得分: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 :(得分:2)
将问题读作:“我想从C#调用本机c ++回调”。
您需要在边界的managed / 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,
答案 2 :(得分:1)
在这里查看How to write callbacks in C# and .NET
如果您正在寻找异步方法回调,那么How to call a Visual C# method asynchronously 肯定会有帮助
答案 3 :(得分:0)
或者你在谈论C# .NET event handlers(扩大代表的回答)?