ใน C# ไม่ควรใช้ Thread.Abort() เพราะอาจทำให้ข้อมูลเสียหาย วิธีที่แนะนำคือใช้ Flag (ธงสัญญาณ) เพื่อบอกให้เธรดหยุดทำงานเอง
หลักการทำงาน
- สร้างตัวแปร flag (bool) เริ่มต้นเป็น false
- ในเธรด ให้วนลูปทำงานต่อเมื่อ flag == false
- เมื่อต้องการหยุด ให้ตั้ง flag = true จากเธรดหลัก
- ใช้
thread.Join()รอให้เธรดจบการทำงาน
ตัวอย่างโค้ดเต็ม
using System;
using System.Threading.Tasks;
using System.Threading;
class Demo {
static void Main(string[] args) {
MyClass c = new MyClass();
// สร้างเธรดใหม่
Thread thread = new Thread(c.display);
thread.Start();
Console.WriteLine("Press any key to exit!");
Console.ReadKey();
c.Stop(); // ตั้ง flag = true
thread.Join(); // รอให้เธรดจบ
}
}
public class MyClass {
private bool flag = false;
public void display() {
while (!flag) {
Console.WriteLine("It's Working");
Thread.Sleep(2000);
}
}
public void Stop() {
flag = true;
}
}
ผลลัพธ์
It's Working Press any key to exit!
ข้อดี: วิธีนี้ปลอดภัยกว่า Abort() เพราะให้เธรดทำความสะอาดทรัพยากรได้ก่อนจบการทำงาน