Merge "DALi Version 1.2.15" into devel/master
[platform/core/uifw/dali-toolkit.git] / plugins / dali-swig / manual / csharp / DisposeQueue.cs
1 // Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
2 // PROPRIETARY/CONFIDENTIAL
3 // This software is the confidential and proprietary
4 // information of SAMSUNG ELECTRONICS ("Confidential Information"). You shall
5 // not disclose such Confidential Information and shall use it only in
6 // accordance with the terms of the license agreement you entered into with
7 // SAMSUNG ELECTRONICS.
8 //
9
10 using System;
11 using System.Collections.Generic;
12
13 namespace Dali
14 {
15
16     public class DisposeQueue
17     {
18         private static DisposeQueue _disposableQueue = new DisposeQueue();
19         private List<IDisposable> _disposables = new List<IDisposable>();
20         private Object _listLock = new object();
21         private delegate int ProcessDisposablesDelegate(IntPtr ptr);
22         private ProcessDisposablesDelegate _disposequeueProcessDisposablesDelegate;
23
24         private DisposeQueue()
25         {
26           _disposequeueProcessDisposablesDelegate = new ProcessDisposablesDelegate(ProcessDisposables);
27           Application.Instance.AddIdle(_disposequeueProcessDisposablesDelegate);
28         }
29
30         ~DisposeQueue()
31         {
32         }
33
34         public static DisposeQueue Instance
35         {
36             get { return _disposableQueue; }
37         }
38
39         public void Add(IDisposable disposable)
40         {
41             lock(_listLock)
42             {
43                 _disposables.Add(disposable);
44             }
45         }
46
47         private int ProcessDisposables(IntPtr ptr)
48         {
49             lock(_listLock)
50             {
51                 foreach (IDisposable disposable in _disposables)
52                 {
53                     disposable.Dispose();
54                 }
55                 _disposables.Clear();
56             }
57             return 0;
58         }
59     }
60 }