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 sent to your email.