[原创]C#--防止回调函数被垃圾回收站回收
C#--防止回调函数被垃圾回收站回收 本人在完成一个C#应用程序是调用VC++的DLL库,在调用回调函数时出现了一个让我晕死的问题,回调函数的代码可以执行,但是会出现空的参数引用的错误。 跟过一后发现是一调用回调函数,就挂了,经过洽谈MSDN,发现可能是被垃圾回收器回收了,晕!怎么办呢,试了很我种方法不行,看看在C#里调用回调函数方法 下面是在MSDN里的实现回调函数的一段代码 using System; using System.Runtime.InteropServices; public delegate bool CallBack(int hwnd, int lParam); public class EnumReportApp { [DllImport("user32")] public static extern int EnumWindows(CallBack x, int y); private static CallBack myCallBack ; //声明回调函数 public static void Main() { //CallBack myCallBack = new CallBack(EnumReportApp.Report); //这是原代码 myCallBack = new CallBack(EnumReportApp.Report); //修改后 EnumWindows(myCallBack, 0); } public static bool Report(int hwnd, int lParam) { Console.Write("Window handle is "); Console.WriteLine(hwnd); return true; } } 我也是根据上面的方法编写的。 应该在new 一个回调函数之前,申明一个全局的就像申明一个全局变量一样简单,就是这样一句话我被蹂躏一天! |