2017-05-20 16:24:15 +00:00
|
|
|
|
using System;
|
|
|
|
|
|
|
|
|
|
namespace BizHawk.Common
|
2016-03-23 00:17:28 +00:00
|
|
|
|
{
|
|
|
|
|
public interface IMonitor
|
|
|
|
|
{
|
|
|
|
|
void Enter();
|
|
|
|
|
void Exit();
|
|
|
|
|
}
|
2017-05-20 16:24:15 +00:00
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2016-03-23 00:17:28 +00:00
|
|
|
|
}
|