{
private static readonly DisposeQueue _disposableQueue = new DisposeQueue();
private List<IDisposable> _disposables = new List<IDisposable>();
- private Object _listLock = new object();
+ private System.Object _listLock = new object();
private EventThreadCallback _eventThreadCallback;
private EventThreadCallback.CallbackDelegate _disposeQueueProcessDisposablesDelegate;
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);
}
- _eventThreadCallback.Trigger();
+ if (_eventThreadCallback != null)
+ {
+ _eventThreadCallback.Trigger();
+ }
}
- private void ProcessDisposables()
+ internal void ProcessDisposables()
{
- lock(_listLock)
+ lock (_listLock)
{
foreach (IDisposable disposable in _disposables)
{