根据客户的要求,今天对原来的功能进行了扩充,程序编译后,在调试的阶段没有任何问题,但是直接运行编译后的程序却莫名其妙的弹出了这个错误,而且这个错误是没有被catch到的,
贴出来的错误(文字版)
有关调用实时(JIT)调试而不是此对话框的详细信息,
请参见此消息的结尾。
************** 异常文本 **************
System.AccessViolationException: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
在 System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)
在 System.Windows.Forms.NativeWindow.DefWndProc(Message& m)
在 System.Windows.Forms.Control.DefWndProc(Message& m)
在 System.Windows.Forms.TreeView.WmMouseDown(Message& m, MouseButtons button, Int32 clicks)
在 System.Windows.Forms.TreeView.WndProc(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
在网上搜了一下,没有查到任何有帮助的结果。奇怪,原来的老代码没有这个错误啊,静下心来仔细分析发现:错误的提示中可以看到应该是窗体中发生了错误。我索性拿出来修改之前的代码和当前的代码进行比较:
在开头的using部分,少了三个命名空间的引用,这是我用了VS自带的工具去除的,难道问题出在这?
把之前移除掉的命名空间
using System.ComponentModel;
重新添加回来之后,编译运行程序,果然错误没有再次出现,
查了一下微软官网关于这个命名空间的说明,System.ComponentModel 命名空间提供用于实现组件和控件运行时和设计时行为的类。此命名空间包括用于实现属性和类型转换器、绑定到数据源以及授权组件的基类和接口。
https://msdn.microsoft.com/zh-cn/library/system.componentmodel(VS.80).aspx
由此可见,VS中 移除未使用的using 并不都是可靠,如果不是通过比较的话,错误的位置很难定位。这是本人在编写过程中随手用了一下这个功能导致发生这个错误才会发现这个问题,所以提示大家,如果你的程序运行时也报了类似的错误,想想你是不是也执行了没有使用的命名空间呢?