HandleRef (user32)
Last changed: -212.251.139.186

.
Summary
A HandleRef is essentially an IntPtr to a handle and a reference to the object the handle belongs to. Using HandleRef prevents the GC from collecting the object until the native method is done with it.

C# Signature:

// NATIVE SUPPORT
HandleRef handle;

Notes:

HandleRef is only needed when there's a chance the Garbage Collector will collect the object the handle refers to.

Tips & Tricks:

Please add some!

Sample Code:

When to use HandleRef

   myFlawedFunction() {
    myObject o = new myObject();
    IntPtr hWnd = o.handle;

    //At this point the GC can run and
    //collect myObject o since it's
    //"not used" anymore.

    Win32.A_Function(hWnd);
   }

   myCorrectFunction() {
    myObject o = new myObject();
    IntPtr hWnd = o.handle;

    //The GC will not collect "o" here since
    //there's a later reference to it.

    Win32.A_Function(new HandlRef(o, hWnd));
   }

Documentation
HandleRef on MSDN