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:
- Utwórz osobny wniosek (App0)
- App0 uruchamia Apl1
- App0 czeka Apl1 aby wyjść z Process.WaitExit()
- 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;
}
}
}
}
w którym zdarzenie muszę zacząć sekund wniosek, czy jest to zamknięcie formularza, czy formularz zamknięty (pierwszy wniosek) –
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. –