public unsafe void SetupBlock(Delegate trampoline, Delegate userDelegate)
{
isa = block_class;
invoke = Marshal.GetFunctionPointerForDelegate (trampoline);
local_handle = (IntPtr) GCHandle.Alloc (userDelegate);
global_handle = IntPtr.Zero;
flags = BlockFlags.BLOCK_HAS_DESCRIPTOR | BlockFlags.BLOCK_HAS_COPY_DISPOSE;
block_descriptor = global_descriptor_ptr;
}