2009-07-11 9 views

Trả lời

12

Bạn có thể sử dụng Lớp quy trình của .NET để bắt đầu quá trình như những người khác được mô tả. Sau đó, câu hỏi là khi nào nên gọi.

Trong hầu hết các trường hợp, sử dụng sự kiện Form.Closing hoặc Form.Closed có vẻ là một lựa chọn dễ dàng.

Tuy nhiên, nếu người khác có thể xử lý sự kiện và có thể đặt CancelEventArgs.Cancel thành sự thật, đây có thể không phải là nơi thích hợp để thực hiện việc này. Ngoài ra, các sự kiện Form.ClosingForm.Closed sẽ không được tăng lên khi gọi Application.Exit(). Tôi không chắc chắn liệu một trong các sự kiện sẽ được nâng lên nếu có bất kỳ trường hợp ngoại lệ chưa được giải quyết nào xảy ra. (Ngoài ra, bạn phải quyết định xem bạn có muốn khởi chạy ứng dụng thứ hai trong trường hợp Application.Exit() hoặc bất kỳ ngoại lệ không được giải quyết nào).

Nếu bạn thực sự muốn chắc chắn các ứng dụng thứ hai (App2) ra mắt sau khi ứng dụng đầu tiên (App1) thoát, bạn có thể chơi một thủ thuật:

  1. Tạo một ứng dụng riêng biệt (App0)
  2. App0 ra mắt App1
  3. App0 chờ App1 để thoát với Process.WaitExit()
  4. App0 ra mắt App2 và thoát thân

Ứng dụng bảng điều khiển mẫu được đính kèm bên dưới cho thấy một trường hợp rất đơn giản: ứng dụng mẫu của tôi khởi chạy notepad trước. Sau đó, khi các notepad thoát, nó sẽ khởi chạy mspaint và thoát ra khỏi chính nó.

Nếu bạn muốn ẩn bảng điều khiển, bạn có thể chỉ cần đặt thuộc tính 'Loại đầu ra' từ 'Ứng dụng bảng điều khiển' thành 'Ứng dụng Windows' trong tab 'Ứng dụng' của Thuộc tính dự án.

Mẫu mã:

using System; 
using System.Diagnostics; 

namespace ProcessExitSample 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      try 
      { 

       Process firstProc = new Process(); 
       firstProc.StartInfo.FileName = "notepad.exe"; 
       firstProc.EnableRaisingEvents = true; 

       firstProc.Start(); 

       firstProc.WaitForExit(); 

       //You may want to perform different actions depending on the exit code. 
       Console.WriteLine("First process exited: " + firstProc.ExitCode); 

       Process secondProc = new Process(); 
       secondProc.StartInfo.FileName = "mspaint.exe"; 
       secondProc.Start();     

      } 
      catch (Exception ex) 
      { 
       Console.WriteLine("An error occurred!!!: " + ex.Message); 
       return; 
      } 
     } 
    } 
} 
16

Sử dụng Process class khi bạn thoát khỏi đơn đăng ký đầu tiên của mình.

var p = new Process(); 
p.StartInfo.FileName = "notepad.exe"; // just for example, you can use yours. 
p.Start(); 
+0

trong đó sự kiện tôi phải bắt đầu thứ hai ứng dụng, cho dù đó là hình thức đóng hoặc hình thức đóng (ứng dụng đầu tiên) –

+0

Nó không quan trọng (trừ khi bạn hủy bỏ đóng trong 'Đóng cửa'), tội lỗi quy trình ce được khởi chạy không đồng bộ và sẽ không ngăn ứng dụng của bạn tiếp tục thực hiện bất kỳ việc gì được yêu cầu - bao gồm tắt. –

3

Bạn chỉ có thể bao ra với nó, vì vậy khi bạn sắp thoát khỏi ứng dụng đầu tiên chỉ bắt đầu ứng dụng thứ hai qua: lớp Process

System.Diagnostics.Process.Start(@"PATH\NAME.EXE"); 
1

Sử dụng NET của.

0

Một số mẫu mã:

try 
{ 
    stateMainLayout b = new stateMainLayout(); 
b.Location = Screen.AllScreens[1].WorkingArea.Location; 
b.ShowDialog(); 
} 
catch 
{ 
stateMainLayout b = new stateMainLayout(); 
b.ShowDialog(); 
}