public delegate void SampleEventHandler(object sender, SampleEventArgs e);
public static event SampleEventHandler SampleEvent;
public static void Main()
Console.WriteLine("Main thread: " + System.Threading.Thread.CurrentThread.ManagedThreadId);
new System.Threading.Thread(() => {
SampleEvent += (s, e) => {
Console.WriteLine(System.Threading.Thread.CurrentThread.ManagedThreadId + " " + e.ID);
new System.Threading.Thread(() => {
Console.WriteLine("Sender thread: " + System.Threading.Thread.CurrentThread.ManagedThreadId);
System.Threading.Thread.Sleep(100);
for (var i = 0; i < 100; i ++)
SampleEvent.Invoke(null, new SampleEventArgs(i));
for (var i = 0; i < 100000; i +=2)
System.Threading.Thread.Sleep(1000);