Skip to content

Instantly share code, notes, and snippets.

@pictos
Created February 16, 2021 18:40
Show Gist options
  • Save pictos/974226514726e012529d1af014c877a4 to your computer and use it in GitHub Desktop.
Save pictos/974226514726e012529d1af014c877a4 to your computer and use it in GitHub Desktop.
using System;
namespace WeakTest
{
class Program
{
static WeakReference<SomeClass> myClass;
static SomeClass holder;
static void Main(string[] args)
{
CreateClass(ref myClass);
Console.WriteLine("Hello World!");
var target = GetTarget(ref myClass);
target.Tick += Target_Tick;
holder.TriggerTick();
holder = null;
target = null;
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
var anotherTarget = GetTarget(ref myClass);
anotherTarget?.TriggerTick();
if (anotherTarget is null)
Console.WriteLine("Disposed");
}
private static void Target_Tick(object sender, EventArgs e)
{
Console.WriteLine("Ticked");
}
static SomeClass GetTarget(ref WeakReference<SomeClass> some)
{
some.TryGetTarget(out var target);
return target;
}
static void CreateClass(ref WeakReference<SomeClass> weak)
{
holder = new SomeClass();
weak = new WeakReference<SomeClass>(holder);
}
}
class SomeClass
{
public event EventHandler Tick;
public void TriggerTick() => Tick?.Invoke(this, EventArgs.Empty);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment