我有这个代码片段:
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?
我通过在方法上面添加这个属性来修复它:
[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) { //...
我怀疑你的代码中有更大的事情发生。 基于你的片段,我会尝试:
如果这些不切实际的尝试,你可能需要更新片段,以更好地解释你正在尝试做什么。