我们的应用程序经历了奇怪的致命System.AccessViolationException。当我们将AppDomain.CurrentDomain.UnhandledException事件配置为记录异常时,我们看到了这些。
Exception: System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at Bootstrap.Run() in e:\build-dir\src\Bootstrap.cs:line 25异常本身似乎不包含“试图读取或写入受保护内存”的信息,这通常表明其他内存已损坏。
更新
发布于 2011-02-27 15:46:03
您正在体验的完全等同于“程序已经经历了问题并将关闭”,但它是被.NET运行时捕获的,而不是操作系统。
查看堆栈跟踪,它不是由代码触发的,这使我认为它来自您正在使用的库或自定义控件生成的工作线程。
跟踪这种情况的唯一方法是在调试器下运行本机库,这将在访问冲突冒泡到CLR层之前捕获访问冲突。这可能很容易,也可能很难。
如果本机代码是您自己的项目,那么设置它的最简单方法是将.NET项目和C++项目放在同一个解决方案中,并确保.NET项目引用的是C++项目。如果你发布更多关于你的环境的细节,我也许能给出更具体的建议。
发布于 2012-04-19 23:33:54
堆栈跟踪指向本机分派信使的MSG参数中的坏数据。您是否尝试过从Microsoft加载符号并检查堆栈跟踪的参数。
如果不了解ui上的控件和连接到的任何事件,就很难确定到底是什么问题。
发布于 2015-06-04 22:03:09
我也有类似的问题,不像@BartRead,一直如此。对我来说,一些CLI代码在一个简单的windows窗体应用程序中工作得很好,但是当我把它放在一个大型插件生态系统(多线程)中时,需要使用Application.Run或Application.DoEvents来发送所需的消息。如果您能够访问正在运行的代码,最好的选择(对我起作用)是在维护功能的同时注释掉越来越多的代码片段。原来,我没有GC::Alloc的回调/委托,虽然被固定和仍然引用,但在内存中被移动,或者直接被标记为收集。
如果你使用GC的话,一定要自己清理干净!
https://stackoverflow.com/questions/5133971
复制相似问题