Designates a body of code as a constrained execution region (CER).
Assembly: mscorlib (in mscorlib.dll)
Compilers use this method to mark catch, finally, and fault blocks as constrained execution regions (CERs). Code that is marked as a constrained region must only call other code with strong reliability contracts. It should not allocate or make virtual calls to unprepared or unreliable methods unless it is prepared to handle failures.
Note that no intermediate language opcodes, except NOP, are allowed between a call to the method and the try block. For more information about CERs, see the classes in the System.Runtime.ConstrainedExecution namespace.
The method calls the ProbeForSufficientStack method.
The following example shows how to reliably set handles by using the method. To reliably set a handle to a specified pre-existing handle, you must ensure that the allocation of the native handle and the subsequent recording of that handle within a SafeHandle object is atomic. Any failure between these operations (such as a thread abort or out-of-memory exception) will result in the native handle being leaked. You can use the method to make sure that the handle is not leaked.
<StructLayout(LayoutKind.Sequential)> _ Structure MyStruct Public m_outputHandle As IntPtr End Structure 'MyStruct NotInheritable Class MySafeHandle Inherits SafeHandle ' Called by P/Invoke when returning SafeHandles Public Sub New() MyBase.New(IntPtr.Zero, True) End Sub Public Function AllocateHandle() As MySafeHandle ' Allocate SafeHandle first to avoid failure later. Dim sh As New MySafeHandle() RuntimeHelpers.PrepareConstrainedRegions() Try Finally Dim myStruct As New MyStruct() NativeAllocateHandle(myStruct) sh.SetHandle(myStruct.m_outputHandle) End Try Return sh End Function
requires full trust for the immediate caller. This member cannot be used by partially trusted or transparent code.