微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

.NET 4.0 – AccessViolationException和WndProc

我有这个代码片段:

internal class MTool : NativeWindow { private const int WM_LBUTTONDOWN = 0x0201; public event TipDeactivateEventHandler Deactivate; protected override void WndProc(ref System.Windows.Forms.Message m) { if( m.Msg == WM_LBUTTONDOWN ) { if( this.Deactivate != null) { this.Deactivate(); } } base.WndProc(ref m); } }

当我运行我的程序,我得到一个AccessViolationException错误在线base.WndProc(ref m); 我不知道为什么。

显然这是从.NET 2.0移植到4.0,我的理论是,现在可能有一个替代方法用来取代WndProc。 这是吗? 如果不是我为什么得到这个exception?

如何测量用于.NET远程处理的IP端口的进/出字节数?

断开数据Windows程序使用sql Server Compact

为什么相同的代码大小会产生不同大小的exe文件

.NET软件更新pipe理器

function键的标准操作列表

使用Windows传真服务器扩展发送传真 – faxcomexlib

使用Console.WriteLine(C#)或printfn(F#)编写粗体文本?

SendKeys.send被阻止

如何将aspnet_compiler更新到4.6.1?

find“指定的模块找不到”

我通过在方法上面添加这个属性来修复它:

[System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptions]

然后围绕try / catch发生异常的那一行。 我在这里找到了这个信息。

WndProc的文档显示要求完全信任。 你试过了吗? 例如:

[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand,Name = "FullTrust")] internal class MTool : NativeWindow { [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand,Name = "FullTrust")] protected override void WndProc(ref Message m) { //...

我怀疑你的代码中有更大的事情发生。 基于你的片段,我会尝试:

注释掉WndProc覆盖,这还是通过崩溃在其他地方的repro?

使WndProc只调用“base.WndProc(ref msg)”。 你仍然得到同样的错误? 什么是callstack? 在堆栈中还有更多的代码吗?

与原来的代码片段,这是唯一发生在WM_LBUTTONDOWN? 当这抛出异常什么是挂钩到该停用处理程序?

如果这些不切实际的尝试,你可能需要更新片段,以更好地解释你正在尝试做什么。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐