Vista下出现此对话框的最经典错误就是AppCrash(应用程序崩溃),原来碰到过一个问题和你的错误一样,原因如下,希望对你有帮助: public delegate int HookProc(int nCode, int wParam, IntPtr lParam); [DllImport("user32.dll")] private static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);然后在一个方法内调用SetWindowsHookEx时第二个参数直接写成new HookProc(....),然后编译运行,程序可以正常运行,不过一段时间之后出现AppCrash 后来找到一些资料,说是由于调用非托管dll函数时提供的变量“死亡”,,大意就是上述的“lpfn”这个变量在程序运行时被回收了。找到办法了,把那个HookProc写成个类的字段 public class XXXX { HookProc myProc; ... public XXXX() { myProc = new HookProc(...); SetWindowsHookEx(WH_GETMESSAGE, myProc, ...); } ... }至此问题不再出现
问题一、当然是程序的问题(也不要去质疑Framework了)。
问题二、测试,以及质量控制。
[DllImport("user32.dll")]
private static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);然后在一个方法内调用SetWindowsHookEx时第二个参数直接写成new HookProc(....),然后编译运行,程序可以正常运行,不过一段时间之后出现AppCrash
后来找到一些资料,说是由于调用非托管dll函数时提供的变量“死亡”,,大意就是上述的“lpfn”这个变量在程序运行时被回收了。找到办法了,把那个HookProc写成个类的字段
public class XXXX {
HookProc myProc;
...
public XXXX() {
myProc = new HookProc(...);
SetWindowsHookEx(WH_GETMESSAGE, myProc, ...);
}
...
}至此问题不再出现