41 lines
580 B
C#
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;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|