BizHawk/BizHawk.Common/IMonitor.cs

41 lines
580 B
C#

using System;
namespace BizHawk.Common
{
public interface IMonitor
{
void Enter();
void Exit();
}
public static class MonitorExtensions
{
public static IDisposable EnterExit(this IMonitor m)
{
var ret = new EnterExitWrapper(m);
m.Enter();
return ret;
}
private class EnterExitWrapper : IDisposable
{
private readonly IMonitor _m;
private bool _disposed = false;
public EnterExitWrapper(IMonitor m)
{
_m = m;
}
public void Dispose()
{
if (!_disposed)
{
_m.Exit();
_disposed = true;
}
}
}
}
}