CSharp · Console
using System;
using System.Threading.Tasks;
public class MyDisposableObject : IDisposable
{
private bool _disposed = false;
public void Dispose() { Dispose(true); }
protected virtual void Dispose(bool disposing)
{
if (disposing && !_disposed)
{
_disposed = true;
Console.WriteLine("I was disposed!");
}
}
public MyDisposableObject(EventGeneratorObject ego)
{
ego.MyEvent += (sender, e) => Console.WriteLine("I'm still alive.");
}
}
public class EventGeneratorObject
{
public EventGeneratorObject()
{
Task.Run(async () =>
{
for (int i = 0; i < 5; i++)
{
await Task.Delay(500);
OnMyEvent();
}
});
}
public event EventHandler<EventArgs> MyEvent;
private void OnMyEvent() { if (MyEvent != null) MyEvent(this, EventArgs.Empty); }
}
public class Program
{
public static void Main(string[] args)
{
EventGeneratorObject ego = new EventGeneratorObject();
using (MyDisposableObject mdo = new MyDisposableObject(ego))
{
Task.Delay(1000).Wait();
}
//mdo is now a zombie object...
Console.WriteLine("Press any key to quit");
Console.ReadKey(true);
}
}