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.
11 using System.Collections.Generic;
15 internal class DisposeQueue : IDisposable
17 private static readonly DisposeQueue _disposableQueue = new DisposeQueue();
18 private List<IDisposable> _disposables = new List<IDisposable>();
19 private System.Object _listLock = new object();
20 private EventThreadCallback _eventThreadCallback;
21 private EventThreadCallback.CallbackDelegate _disposeQueueProcessDisposablesDelegate;
23 private DisposeQueue()
27 public static DisposeQueue Instance
29 get { return _disposableQueue; }
32 private bool _isCalled = false;
33 public void Initialize()
35 if(_isCalled == false)
37 _disposeQueueProcessDisposablesDelegate = new EventThreadCallback.CallbackDelegate(ProcessDisposables);
38 _eventThreadCallback = new EventThreadCallback(_disposeQueueProcessDisposablesDelegate);
43 public void Add(IDisposable disposable)
47 _disposables.Add(disposable);
50 if (_eventThreadCallback != null)
52 _eventThreadCallback.Trigger();
56 public void ProcessDisposables()
60 foreach (IDisposable disposable in _disposables)