[C#] Attaching an event handler

Blog ตอนนี้ มาจากตอน Review Code แล้วผมพลาดครับ ลองดู Code ได้นะครับ

MyEvent += MyEvent_Handle1;
MyEvent += MyEvent_Handle2;

จาก Code ด้านบน ผมจำผิดจริงๆ ผมมองว่า MyEvent_Handle1 ถูกแทนทีด้วย MyEvent_Handle2 เลยทวงตอน Review ไปว่า Logic ของ MyEvent_Handle1 จะหายไปครับ แต่มีโดนแย้งมา เลยมาลองทำ Snippet ลองดีกว่าครับ

using System;
					
public class Program
{
	static event EventHandler MyEvent;

    public static void Main()
    {
        // registering event
        MyEvent += MyEvent_Handle1;
		MyEvent += MyEvent_Handle2;
        // invoke event
        MyEvent(null, EventArgs.Empty);
    }

    static void MyEvent_Handle1(object sender, EventArgs e)
    {
        Console.WriteLine("MyEvent1 fired");
    }
	
	 static void MyEvent_Handle2(object sender, EventArgs e)
    {
        Console.WriteLine("MyEvent2 fired");
    }
}

จริงด้วยครับ ทำงานทั้งคู่เลย เพราะมัน subscribe MyEvent_Handle1 และ MyEvent_Handle2 เรียบร้อยแล้วครับ ตาม https://dotnetfiddle.net/1ivM9m ครับ

ถ้าลองเกรียนๆ ยัด Event MyEvent_Handle1 หลายๆรอบ และ MyEvent_Handle2 ตาม Code หรือจะดูจาก https://dotnetfiddle.net/Dfy15h

// registering event
MyEvent += MyEvent_Handle1;
MyEvent += MyEvent_Handle1;
MyEvent += MyEvent_Handle2;
MyEvent -= MyEvent_Handle2;
MyEvent += MyEvent_Handle2;

ผลลัพธ์ที่ได้

MyEvent1 fired
MyEvent1 fired
MyEvent2 fired

สรุป

  • Operation += มันเป็นการ Subscribe Event เพิ่มเข้าไปครับ ไม่ใช่การ Assign ค่า
  • Operation -= มันเป็นการ Unsubscribe Event เข้าไปครับ บางทีอาจจะกลัวเรื่อง Event เบิ๊ลหลายคนจะเขียน Code Unsubscribe และต่อด้วย Subscribe
MyEvent -= MyEvent_Handle2;
MyEvent += MyEvent_Handle2;

อาจจะด้วยความมืนเบลอๆของผมเอง และไม่ได้มาแตะ Winform มานานเลยพลาดได้ครับ


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts to your email.