private static void CleanUpMessages(object state)
{
var directory = (DirectoryInfo) state;
bool createdNew;
var mutexName = string.Concat(MutexCleanUpKey, ".", directory.Name);
var accessControl = new MutexSecurity();
var sid = new SecurityIdentifier(WellKnownSidType.AuthenticatedUserSid, null);
accessControl.SetAccessRule(new MutexAccessRule(sid, MutexRights.FullControl, AccessControlType.Allow));
using (var mutex = new Mutex(true, mutexName, out createdNew, accessControl))
{
if (createdNew)
{
try
{
Thread.Sleep(FileTimeoutMilliseconds);
}
catch (ThreadInterruptedException)
{
}
CleanUpMessages(directory);
mutex.ReleaseMutex();
}
}
if (createdNew)
{
ThreadPool.QueueUserWorkItem(CleanUpMessages, directory);
}
}