##// END OF EJS Templates
sync
sync

File last commit:

r93:dc4942d09e74 v2
r108:f3bdb7ba59b9 v2
Show More
MTComponentContainer.cs
48 lines | 1.3 KiB | text/x-csharp | CSharpLexer
/ Implab / MTComponentContainer.cs
cin
improved tracing...
r93 using System;
using Implab.Parallels;
using System.Threading;
namespace Implab {
public class MTComponentContainer : IComponentContainer, IDisposable {
static readonly MTComponentContainer _appContainer;
static MTComponentContainer() {
_appContainer = new MTComponentContainer();
AppDomain.CurrentDomain.ProcessExit += HandleProcessExit;
}
public static MTComponentContainer AppContainer {
get {
return _appContainer;
}
}
bool m_disposed;
readonly MTQueue<IDisposable> m_components = new MTQueue<IDisposable>();
public void Add(IDisposable item) {
Safe.ArgumentNotNull(item, "item");
Thread.MemoryBarrier();
if (m_disposed) {
item.Dispose();
} else {
m_components.Enqueue(item);
if (m_disposed && m_components.TryDequeue(out item))
item.Dispose();
}
}
public void Dispose() {
m_disposed = true;
IDisposable item;
while (m_components.TryDequeue(out item))
item.Dispose();
}
static void HandleProcessExit (object sender, EventArgs e)
{
_appContainer.Dispose();
}
}
}