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

时间:2010-06-22 10:02:06

标签: c#-4.0

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

4 个答案:

答案 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(扩大代表的回答)?