2010-06-22 56 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,

相關問題