我有以下代码片段:

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);
    }
}

当我运行程序时,在base.WndProc(ref m);行收到AccessViolationException错误,我不知道为什么。

显然,这是从.NET 2.0移植到4.0的,我的理论是,现在可能有替代覆盖WndProc的替代方法。是这种情况吗?如果不是,我为什么会得到这个异常(exception)?

最佳答案

我通过在方法上方添加此属性来解决此问题:

[System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptions]

然后用try/catch包围发生异常的行。我发现此信息here

关于c# - .NET 4.0-AccessViolationException和WndProc,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12010296/

10-09 16:27