如何在调用方法内部定义回调函数
本文关键字:定义 回调 函数 内部 方法 调用 | 更新日期: 2023-09-27 18:22:35
我想在调用方法内部声明/定义我的委托和回调函数。这可能吗?如果是,如何?这是我的代码,我想在上执行我的第一次植入操作
delegate bool myDelegate(IntPtr module, string type, IntPtr lParam);
public static bool EnumResTypeProc(IntPtr module, string typename, IntPtr lParam)
{
(((GCHandle) lParam).Target as List<string>).Add(typename);
return true;
}
public static string[] getResourceTypes(IntPtr module)
{
List<string> result = new List<string>();
GCHandle pin = GCHandle.Alloc(result);
WinApi.EnumResourceTypes(module, Marshal.GetFunctionPointerForDelegate(new myDelegate(EnumResTypeProc)), (IntPtr)pin);
pin.Free();
return result.ToArray();
}
我得到的最接近的:
delegate bool myDelegate(IntPtr module, string type, IntPtr lParam);
public static string[] getResourceTypes(IntPtr module)
{
List<string> result = new List<string>();
GCHandle pin = GCHandle.Alloc(result);
myDelegate d = delegate(IntPtr handle, string typename, IntPtr lParam)
{ (((GCHandle) lParam).Target as List<string>).Add(typename); return true; };
WinApi.EnumResourceTypes(module, Marshal.GetFunctionPointerForDelegate(d), (IntPtr) pin);
pin.Free();
return result.ToArray();
}
此时不可能在方法内部声明委托。即使经过编译,它也会导致非托管代码使我的应用程序崩溃。
是的,您可以使用匿名方法或lambda表达式。
// untested
Func<IntPtr, string, IntPtr, bool> inline = (module, typename, lParam) =>
{
(((GCHandle)lParam).Target as List<string>).Add(typename);
return true;
};
WinApi.EnumResourceTypes(module, Marshal.GetFunctionPointerForDelegate(inline), (IntPtr)pin);
尝试使用以下链接:
微软支持
如何在C#和.NET 中编写回调
或者我的例子:
public delegate void AsyncMethodCaller(strind inputdata);
void someMethod()
{
//
// ... some actions
//
AsyncMethodCaller caller = new AsyncMethodCaller(this.ProcessInputData);
// Initiate the asychronous call.
IAsyncResult result = caller.BeginInvoke("my data");
}
void ProcessInputData(string inputData)
{
// some actions
}