Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

.NET 4.0 - AccessViolationException and WndProc

I have this code snippet:

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

When I run my program I get an AccessViolationException error at the line base.WndProc(ref m); and I don't know why.

Apparently this was ported over from .NET 2.0 to 4.0 and my theory is that there may be an alternate method used now in place of overriding WndProc. Is this case? If not why am I getting this exception?

like image 868
Kyle V. Avatar asked Aug 17 '12 17:08

Kyle V.


2 Answers

I fixed it by adding this attribute above the method:

[System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptions]

Then surrounding the line where the exception occurs with a try/catch. I found this information here.

like image 141
Kyle V. Avatar answered Nov 05 '22 04:11

Kyle V.


The documentation for WndProc shows demanding full-trust. have you tried that? e.g.:

[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)
    {
//...
like image 2
Peter Ritchie Avatar answered Nov 05 '22 05:11

Peter Ritchie