Các giải pháp lập trình CSharp- P15: Các giải pháp lập trình C# khảo sát chiều rộng của thư viện lớp .NET Framework và cung cấp giải pháp cụ thể cho các vấn đề thường gặp. Mỗi giải pháp được trình bày theo dạng “vấn đề/giải pháp” một cách ngắn gọn và kèm theo là các ví dụ mẫu. | 141 Chương 4 Tiểu trình tiến trình và sự đồng bộ catch ThreadStateException 0 Thread wasn t suspended. HH mm break case I Gián đoạn tiểu trình thứ hai. 0 Interrupting second thread. HH mm break case E Hủy bỏ tiểu trình thứ hai và truyền một đối tượng trạng thái cho tiểu trình đang bị hủy trong trường hợp này là một thông báo. 0 Aborting second thread. HH mm Terminating example. Đợi tiểu trình thứ hai kết thúc. break while command E Nhấn Enter để kết thúc. Main method complete. Press Enter. 142 Chương 4 Tiểu trình tiến trình và sự đồng bộ 7. Nhận biết khi nào một tiểu trình kết thúc 1 Bạn muốn biết khi nào một tiểu trình đã kết thúc. Sử dụng thuộc tính IsAlive hay phương thức Join của lớp Thread. Cách dễ nhất để kiểm tra một tiểu trình đã kết thúc hay chưa là kiểm tra thuộc tính . Thuộc tính này trả về true nếu tiểu trình đã được khởi chạy nhưng chưa kết thúc hay bị hủy. Thông thường bạn sẽ cần một tiểu trình để đợi một tiểu trình khác hoàn tất việc xử lý của nó. Thay vì kiểm tra thuộc tính isAlive trong một vòng lặp bạn có thể sử dụng phương thức . Phương thức này khiến tiểu trình đang gọi dừng lại block cho đến khi tiểu trình được tham chiếu kết thúc. Bạn có thể tùy chọn chỉ định một khoảng thời gian giá trị int hay TimeSpan mà sau khoảng thời gian này Join sẽ hết hiệu lực và quá trình thực thi của tiểu trình đang gọi sẽ phục hồi lại. Nếu bạn chỉ định một giá trị time-out Join trả về true nếu tiểu trình đã kết thúc và false nếu Join đã hết hiệu lực. Ví dụ dưới đây thực thi một tiểu trình thứ hai và rồi gọi Join để đợi tiểu trình thứ hai kết thúc. Vì tiểu trình thứ hai mất 5 giây để thực thi nhưng phương thức Join chỉ định giá trị time-out là 3 giây nên Join sẽ luôn hết hiệu lực và ví dụ này sẽ hiển thị một thông báo ra cửa