2009-07-11 12 views

Odpowiedz

12

Możesz użyć klasy procesowej .NET, aby rozpocząć proces, tak jak opisali inni. Potem pojawia się pytanie, kiedy zadzwonić.

W większości wypadków używanie zdarzenia Form.Closing lub Form.Closed wydaje się być łatwym wyborem.

Jeśli jednak ktoś inny poradzi sobie z wydarzeniem i może ustawić wartość CancelEventArgs.Cancel, może to nie być właściwe miejsce. Również zdarzenia Form.Closing i Form.Closed nie będą wywoływane po wywołaniu Application.Exit(). Nie jestem pewien, czy którekolwiek z wydarzeń zostanie podniesione, jeśli wystąpią nieobsługiwane wyjątki. (Musisz również zdecydować, czy chcesz uruchomić drugą aplikację w przypadku Application.Exit() lub nieobsługiwanego wyjątku).

Jeśli naprawdę chcesz, aby upewnić się, że drugi wniosek (App2) uruchamia po pierwszej aplikacji (App1) zakończony, można grać trick:

  1. Utwórz osobny wniosek (App0)
  2. App0 uruchamia Apl1
  3. App0 czeka Apl1 aby wyjść z Process.WaitExit()
  4. App0 uruchamia APP2 i wychodzi sobie

Przykładowa aplikacja konsoli dołączona poniżej pokazuje bardzo prosty przypadek: moja przykładowa aplikacja uruchamia najpierw notatnik. Następnie, po wyjściu notatnika, uruchamia mspaint i wychodzi.

Jeśli chcesz ukryć konsolę, możesz po prostu ustawić właściwość "Typ wyniku" z "Aplikacja konsolowa" na "Aplikacja systemu Windows" w zakładce "Aplikacja" Właściwości projektu.

Przykładowy kod:

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

Użyj Process class podczas wychodzenia z pierwszej aplikacji.

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

w którym zdarzenie muszę zacząć sekund wniosek, czy jest to zamknięcie formularza, czy formularz zamknięty (pierwszy wniosek) –

+0

Nie ma znaczenia (chyba że anulujesz zamknięcie w "Zamknięciu"), grzech Proces centralny jest uruchamiany asynchronicznie i nie uniemożliwia aplikacji kontynuacji robienia tego, co ma robić - w tym zamykania. –

3

Można po prostu zapłacić od niej, więc jeśli masz zamiar opuścić pierwszą aplikację wystarczy uruchomić drugą aplikację poprzez: Process klasy

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

Skorzystaj .NET za.

0

Niektóre przykładowy kod:

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