36 lines
1.0 KiB
C#
36 lines
1.0 KiB
C#
|
using System;
|
||
|
using System.Diagnostics;
|
||
|
using System.Collections.Generic;
|
||
|
|
||
|
namespace NLua.Method
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// We keep track of what delegates we have auto attached to an event - to allow us to cleanly exit a NLua session
|
||
|
/// </summary>
|
||
|
class EventHandlerContainer : IDisposable
|
||
|
{
|
||
|
private readonly Dictionary<Delegate, RegisterEventHandler> _dict = new Dictionary<Delegate, RegisterEventHandler>();
|
||
|
|
||
|
public void Add(Delegate handler, RegisterEventHandler eventInfo)
|
||
|
{
|
||
|
_dict.Add(handler, eventInfo);
|
||
|
}
|
||
|
|
||
|
public void Remove(Delegate handler)
|
||
|
{
|
||
|
bool found = _dict.Remove(handler);
|
||
|
Debug.Assert(found);
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Remove any still registered handlers
|
||
|
/// </summary>
|
||
|
public void Dispose()
|
||
|
{
|
||
|
foreach (KeyValuePair<Delegate, RegisterEventHandler> pair in _dict)
|
||
|
pair.Value.RemovePending(pair.Key);
|
||
|
|
||
|
_dict.Clear();
|
||
|
}
|
||
|
}
|
||
|
}
|