namespace Tizen.NUI
{
- public class DisposeQueue
+ internal class DisposeQueue
{
- private static DisposeQueue _disposableQueue = new DisposeQueue();
+ private static readonly DisposeQueue _disposableQueue = new DisposeQueue();
private List<IDisposable> _disposables = new List<IDisposable>();
- private Object _listLock = new object();
- private delegate int ProcessDisposablesDelegate(IntPtr ptr);
- private ProcessDisposablesDelegate _disposequeueProcessDisposablesDelegate;
+ private System.Object _listLock = new object();
+ private EventThreadCallback _eventThreadCallback;
+ private EventThreadCallback.CallbackDelegate _disposeQueueProcessDisposablesDelegate;
private DisposeQueue()
{
- _disposequeueProcessDisposablesDelegate = new ProcessDisposablesDelegate(ProcessDisposables);
- Application.Instance.AddIdle(_disposequeueProcessDisposablesDelegate);
}
~DisposeQueue()
get { return _disposableQueue; }
}
+ private bool _isCalled = false;
+ public void Initialize()
+ {
+ if(_isCalled == false)
+ {
+ _disposeQueueProcessDisposablesDelegate = new EventThreadCallback.CallbackDelegate(ProcessDisposables);
+ _eventThreadCallback = new EventThreadCallback(_disposeQueueProcessDisposablesDelegate);
+ _isCalled = true;
+ }
+ }
+
public void Add(IDisposable disposable)
{
- lock(_listLock)
+ lock (_listLock)
{
_disposables.Add(disposable);
}
+
+ if (_eventThreadCallback != null)
+ {
+ _eventThreadCallback.Trigger();
+ }
}
- private int ProcessDisposables(IntPtr ptr)
+ internal void ProcessDisposables()
{
- lock(_listLock)
+ lock (_listLock)
{
foreach (IDisposable disposable in _disposables)
{
}
_disposables.Clear();
}
- return 0;
}
}
}