CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 153

153

Chương 4: Tiểu trình, tiến trình, và sự đồng bộ

người dùng đóng cửa sổ chính bằng trình đơn hệ thống, và nó cho cơ hội ứng dụng thực hiện
việc tắt một cách bình thường.

CloseMainWindow

sẽ không kết thúc các ứng dụng không có cửa

sổ chính hoặc các ứng dụng có cửa sổ chính bị vô hiệu (có thể vì một hộp thoại hiện đang
được mở). Với những tình huống như thế,

CloseMainWindow

sẽ trả về

false

.

CloseMainWindow

trả về

true

nếu thông điệp được gửi thành công, nhưng không bảo đảm tiến

trình thật sự kết thúc. Ví dụ, các ứng dụng dùng để soạn thảo dữ liệu thường sẽ cho cơ hội
người dùng lưu lại các dữ liệu chưa được lưu nếu nhận được thông điệp này. Người dùng
thường có cơ hội hủy bỏ việc đóng cửa sổ với những tình huống như thế. Điều này nghĩa là

CloseMainWindow

sẽ trả về

true

, nhưng ứng dụng vẫn cứ chạy khi người dùng hủy bỏ. Bạn có

thể sử dụng phương thức

Process.WaitForExit

để báo hiệu việc kết thúc tiến trình và thuộc

tính

Process.HasExited

để kiểm tra tiến trình đã kết thúc hay chưa. Và bạn cũng có thể sử

dụng phương thức

Kill

.

Phương thức

Kill

kết thúc một tiến trình ngay lập tức; người dùng không có cơ hội dừng việc

kết thúc, và tất cả các dữ liệu chưa được lưu sẽ bị mất.

Kill

là tùy chọn duy nhất để kết thúc

các ứng dụng dựa-trên-Windows không đáp lại

CloseMainWindow

và để kết thúc các ứng dụng

không-dựa-trên-Windows.
Ví dụ dưới đây khởi chạy một thể hiện mới của Notepad, đợi 5 giây, sau đó kết thúc tiến trình
Notepad. Trước tiên, ví dụ này kết thúc tiến trình bằng

CloseMainWindow

. Nếu

CloseMainWindow

trả về

false

, hoặc tiến trình Notepad vẫn cứ chạy sau khi

CloseMainWindow

được gọi, ví dụ này sẽ gọi

Kill

và buộc tiến trình Notepad kết thúc; bạn có thể buộc

CloseMainWindow

trả về

false

bằng cách bỏ mặc hộp thoại File Open mở.

using System;

using System.Threading;

using System.Diagnostics;

public class TerminateProcessExample {

public static void Main () {

// Tạo một Process mới và chạy notepad.exe.

using (Process process = Process.Start("notepad.exe")) {

// Đợi 5 giây và kết thúc tiến trình Notepad.

Console.WriteLine("Waiting 5 seconds before terminating" +

" notepad.exe.");

Thread.Sleep(5000);

// Kết thúc tiến trình Notepad.

Console.WriteLine("Terminating Notepad with " +

"CloseMainWindow.");

// Gửi một thông điệp đến cửa sổ chính.

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.