Danh mục tài liệu

Các giải pháp lập trình CSharp- P16

Số trang: 10      Loại file: pdf      Dung lượng: 2.62 MB      Lượt xem: 14      Lượt tải: 0    
Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Các giải pháp lập trình CSharp- P16: 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.
Nội dung trích xuất từ tài liệu:
Các giải pháp lập trình CSharp- P16 151 Chương 4: Tiểu trình, tiến trình, và sự đồng bộVí dụ dưới đây sử dụng Process để thực thi Notepad trong một cửa sổ ở trạng thái phóng to vàmở một file có tên là C:\Temp\file.txt. Sau khi tạo, ví dụ này sẽ gọi phương thứcProcess.WaitForExit để dừng tiểu trình đang chạy cho đến khi tiến trình kết thúc hoặc giá trịtime-out (được chỉ định trong phương thức này) hết hiệu lực.using System;using System.Diagnostics;public class StartProcessExample { public static void Main () { // Tạo một đối tượng ProcessStartInfo và cấu hình cho nó // với các thông tin cần thiết để chạy tiến trình mới. ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = notepad.exe; startInfo.Arguments = file.txt; startInfo.WorkingDirectory = @C:\Temp; startInfo.WindowStyle = ProcessWindowStyle.Maximized; startInfo.ErrorDialog = true; // Tạo một đối tượng Process mới. using (Process process = new Process()) { // Gán ProcessStartInfo vào Process. process.StartInfo = startInfo; try { // Khởi chạy tiến trình mới. process.Start(); // Đợi tiến trình mới kết thúc trước khi thoát. Console.WriteLine(Waiting 30 seconds for process to + finish.); process.WaitForExit(30000); } catch (Exception ex) { 152 Chương 4: Tiểu trình, tiến trình, và sự đồng bộ Console.WriteLine(Could not start process.); Console.WriteLine(ex); } } // Nhấn Enter để kết thúc. Console.WriteLine(Main method complete. Press Enter.); Console.ReadLine(); }}11. Kết thúc một tiến trình Bạn muốn kết thúc một tiến trình (một ứng dụng hay một dịch vụ). Thu lấy đối tượng Process mô tả tiến trình hệ điều hành cần kết thúc. Đối với các ứng dụng dựa-trên-Windows, hãy gọi phương thức Process.CloseMainWindow để gửi một thông điệp đến cửa sổ chính của ứng dụng. Đối với các ứng dụng dựa- trên-Windows bỏ qua CloseMainWindow, hay đối với các ứng dụng không-dựa- trên-Windows, gọi phương thức Process.Kill.Nếu khởi chạy một tiến trình mới từ mã lệnh được-quản-lý bằng lớp Process (đã được thảoluận trong mục 4.10), bạn có thể kết thúc tiến trình mới bằng đối tượng Process mô tả tiếntrình này. Bạn cũng có thể thu lấy các đối tượng Process chỉ đến các tiến trình khác hiện đangchạy bằng các phương thức tĩnh của lớp Process (được tóm tắt trong bảng 4.4).Bảng 4.4 Các phương thức dùng để thu lấy các tham chiếu Process Phương thức Mô tả GetCurrentProcess Trả về đối tượng Process mô tả tiến trình hiện đang tích cực. GetProcessById Trả về đối tượng Process mô tả tiến trình với ID được chỉ định. Trả về mảng các đối tượng Process mô tả tất cả các tiến trình GetProcesses hiện đang tích cực. Trả về mảng các đối tượng Process mô tả tất cả các tiến trình GetProcessesByName hiện đang tích cực với tên thân thiện được chỉ định. Tên thân thiện là tên của file thực thi không tính phần mở rộng và đường dẫn; ví dụ, notepad hay calc.Một khi đã có đối tượng Process mô tả tiến trình cần kết thúc, bạn cần gọi phương thứcCloseMainWindow hay phương thức Kill. Phương thức CloseMainWindow gửi một thông điệpđến cửa sổ chính của ứng dụng dựa-trên-Windows. Phương thức này có cùng tác dụng như thể 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ệnviệ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ửasổ 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ếntrì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ộingườ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ùngthườ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ộctí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ệckế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úccác ứng dụng dựa-trên-Windows không đáp lại CloseMainWindow và để kết thúc các ứng dụngkhô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ìnhNotepad. Trước tiên, ví dụ này kết thúc tiến trình bằng CloseMainWindow. NếuCloseMainWindow 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ộcCloseMainWindow trả về false bằng cách bỏ mặc hộp thoại File Open mở.using System;using System.Threading;using Sy ...