2010-05-06 27 views
5

Có thể nghịch đảo của câu hỏi này: Process.HasExited returns true even though process is running?C#: Process.HasExited trả về false mặc dù quá trình này đã chấm dứt

tôi gọi Kill() trên một quá trình và nó dường như đã kết thúc. Nhưng khi tôi thử nghiệm HasExited, tôi nhận được sai:

myProcess.Kill(); 

while (!myProcess.HasExited) 
{ 
    Thread.Sleep(1000); 
} 

Và điều này tiếp tục vô thời hạn. Cấp, tôi phải thay đổi mã này để ngừng chờ đợi cuối cùng, nhưng tôi tò mò là tại sao HasExited vẫn trả về sai lầm khi quá trình này dường như đã loại bỏ bản đồ để nói.

Trả lời

7

Bạn có đang chuyển hướng đầu ra tiêu chuẩn không? MSDN quy định như sau:

Khi đầu ra tiêu chuẩn được chuyển hướng đến trình xử lý sự kiện không đồng bộ, có thể xử lý đầu ra sẽ không hoàn thành khi thuộc tính này trả về true. Để đảm bảo rằng xử lý sự kiện không đồng bộ đã được hoàn thành, hãy gọi quá tải WaitForExit() mà không có tham số trước khi kiểm tra HasExited.

Dù sao, cách giải quyết đề nghị có thể sẽ làm các trick:

myProcess.Kill(); 
myProcess.WaitForExit(); 
+0

Đúng vậy, tôi đã chuyển hướng đầu ra tiêu chuẩn. Tôi chọn để đặt Kill và WaitForExit (1000) trong một vòng lặp thử lại ba lần mặc dù. Tôi không thể chờ đợi mãi mãi như bài viết MSDN gợi ý. – Jeremy

+0

Tôi cũng tự hỏi nếu điều này có nghĩa là nó có thể cho một quá trình chấm dứt và vẫn có dòng đầu ra tiêu chuẩn của nó mở. Hay bài báo có nghĩa là trình streamrea cục bộ của tôi đã không nhận được thông báo đóng cửa mặc dù quá trình nguồn của nó đã thoát. – Jeremy

Các vấn đề liên quan