2 // System.Runtime.InteropServices.CriticalHandle
5 // Kazuki Oikawa (kazuki@panicode.com)
11 using System.Runtime.ConstrainedExecution;
12 using System.Runtime.Serialization;
14 namespace System.Runtime.InteropServices
16 public abstract class CriticalHandle : CriticalFinalizerObject, IDisposable
18 protected IntPtr handle;
19 bool _disposed = false;
21 protected CriticalHandle (IntPtr invalidHandleValue)
23 handle = invalidHandleValue;
26 [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
32 [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
38 [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
39 public void Dispose ()
44 public void Dispose (bool disposing)
53 if (disposing == true){
54 if (ReleaseHandle ()) {
55 GC.SuppressFinalize (this);
57 // Failed in release...
62 [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
63 protected abstract bool ReleaseHandle ();
65 [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
66 protected void SetHandle (IntPtr handle)
71 [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
72 public void SetHandleAsInvalid()
77 public bool IsClosed {
78 [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
79 get { return _disposed; }
82 public abstract bool IsInvalid {
83 [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]