2 * Copyright(c) 2019 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 using System.ComponentModel;
24 /// <since_tizen> 6 </since_tizen>
25 public class Disposable : global::System.IDisposable
28 /// A Flag to check if it is already disposed.
30 /// <since_tizen> 6 </since_tizen>
31 protected bool disposed = false;
33 /// This will not be public.
34 [EditorBrowsable(EditorBrowsableState.Never)]
35 protected bool swigCMemOwn;
37 /// This will not be public.
38 [EditorBrowsable(EditorBrowsableState.Never)]
39 protected global::System.Runtime.InteropServices.HandleRef swigCPtr;
41 private bool isDisposeQueued = false;
44 /// Create an instance of Disposable.
46 /// <since_tizen> 6 </since_tizen>
50 swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
53 /// This will not be public.
54 [EditorBrowsable(EditorBrowsableState.Never)]
55 public Disposable(global::System.IntPtr cPtr, bool cMemoryOwn)
57 swigCMemOwn = cMemoryOwn;
58 swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
64 /// <since_tizen> 6 </since_tizen>
69 isDisposeQueued = true;
70 DisposeQueue.Instance.Add(this);
77 /// <since_tizen> 6 </since_tizen>
80 //Throw excpetion if Dispose() is called in separate thread.
81 if (!Window.IsInstalled())
83 throw new System.InvalidOperationException("This API called from separate thread. This API must be called from MainThread.");
88 Dispose(DisposeTypes.Implicit);
92 Dispose(DisposeTypes.Explicit);
93 System.GC.SuppressFinalize(this);
100 /// <since_tizen> 6 </since_tizen>
101 protected virtual void Dispose(DisposeTypes type)
108 if (type == DisposeTypes.Explicit)
111 //Release your own managed resources here.
112 //You should release all of your own disposable objects here.
115 //Release your own unmanaged resources here.
116 //You should not access any managed member here except static instance.
117 //because the execution order of Finalizes is non-deterministic.
118 if (swigCPtr.Handle != global::System.IntPtr.Zero)
123 ReleaseSwigCPtr(swigCPtr);
125 swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
132 /// Release swigCPtr.
134 /// <since_tizen> 6 </since_tizen>
135 /// This will not be public opened.
136 [EditorBrowsable(EditorBrowsableState.Never)]
137 protected virtual void ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef swigCPtr)