2010-10-25 31 views
11

Cách tốt nhất để giết một cá thể ứng dụng là gì? Tôi nhận thức được những ba phương pháp:.Cách tốt nhất để hủy đơn đăng ký

Application.Exit()

Environment.Exit (0)

Process.GetCurrentProcess() Kill()

Bất cứ ai có cho tôi biết đó là tốt hơn hoặc khi sử dụng từng điều trên sẽ phù hợp?

Trả lời

19

hướng dẫn từ C# faq:

System.Windows.Forms.Application.Exit() - Thông báo cho tất cả các thông điệp bơm rằng họ phải chấm dứt, và sau đó đóng tất cả các cửa sổ ứng dụng sau khi thông điệp đã được xử lý. Phương thức này dừng tất cả các vòng lặp tin nhắn đang chạy trên tất cả các luồng và đóng tất cả các cửa sổ của ứng dụng. Phương pháp này không buộc ứng dụng thoát ra. Phương thức Exit thường được gọi từ bên trong một vòng lặp tin nhắn và bắt đầu chạy để trả về. Để thoát khỏi vòng lặp tin nhắn cho chỉ chuỗi hiện tại, hãy gọi ExitThread. Đây là cuộc gọi để sử dụng nếu bạn đang chạy một ứng dụng WinForms. Như một hướng dẫn chung, sử dụng cuộc gọi này nếu bạn đã gọi System.Windows.Forms.Application.Run.

System.Environment.Exit (exitCode) - Chấm dứt quá trình này và cung cấp cho hệ điều hành cơ bản mã thoát được chỉ định. Cuộc gọi này yêu cầu bạn có quyền SecurityPermissionFlag.UnmanagedCode. Nếu bạn không, một lỗi SecurityException xảy ra. Đây là cuộc gọi để sử dụng nếu bạn đang chạy một ứng dụng giao diện điều khiển.

Việc hủy quy trình có thể không được khuyến nghị.

+0

Cảm ơn rất nhiều thông tin tốt. – Eaton

+5

Cần lưu ý rằng 'Process.GetCurrentProcess(). Kill()' là cách chính xác để chấm dứt một ứng dụng nếu bạn cần nó dừng ngay lập tức. Bạn sẽ không muốn chờ một ứng dụng giao dịch đang phun ra các lệnh sai lầm để thoát ra một cách duyên dáng. Bạn muốn giết con chó con đó chết. – 0b101010

0

Chỉ cần trả lời nhanh, tôi sẽ luôn sử dụng tùy chọn "Thoát" khi nó hoạt động. Đó là một cách sạch hơn nhiều để làm điều đó.

Để "Kill" quy trình có nghĩa là chính xác điều đó, và do đó chương trình không thực hiện bất kỳ công việc dọn dẹp nào có thể muốn thực hiện (như lưu cấu hình, lưu các tệp khác, v.v ...). Trừ khi bạn biết quy trình là gì và nó không có bất kỳ "dọn dẹp" nào để làm, và thậm chí sau đó, nó chỉ sạch hơn để sử dụng "Thoát".

Dường như không có bất kỳ sự khác biệt nào giữa hai tùy chọn "Thoát" mà bạn đề cập, tôi sẽ cược rằng giá trị đầu tiên chỉ đơn thuần là chuyển giá trị bằng 0.

+0

Tôi hiểu, cảm ơn thông tin. Đây là một kiểm tra an ninh quan trọng vì vậy nó có lẽ sẽ tốt hơn cho tôi để giết nó vì tôi không muốn ứng dụng chạy tất cả nếu nó không kiểm tra này. – Eaton

2

Nếu đây là ứng dụng Windows Forms, hãy sử dụng Application.Exit(). Điều đó sẽ đóng chương trình độc đáo.

-4
foreach (Process proc in Process.GetProcessesByName("WindowsFormsApplication1.vshost")) 
     { 

      proc.Kill(); 

     } 
+0

Điều này không trả lời được câu hỏi. – nphx

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