2009-07-11 14 views

risposta

12

È possibile utilizzare la classe di processo .NET per avviare un processo come descritto da altre persone. Quindi la domanda è quando chiamare.

Nella maggior parte dei casi, utilizzare l'evento Form.Closing o Form.Closed sembra essere una scelta facile.

Tuttavia, se qualcun altro può gestire l'evento e può impostare CancelEventArgs.Cancel su true, questo potrebbe non essere il posto giusto per farlo. Inoltre, gli eventi Form.Closing e Form.Closed non verranno generati quando viene chiamato Application.Exit(). Non sono sicuro se uno degli eventi verrà generato se si verificano eccezioni non gestite. (Inoltre, è necessario decidere se si desidera avviare la seconda applicazione in caso di Application.Exit() o qualsiasi eccezione non gestita).

Se davvero si vuole assicurarsi che il secondo ricorso (App2) lancia dopo la prima applicazione (App1) uscita, si può giocare un trucco:

  1. Creare un'applicazione separata (APP0)
  2. APP0 lancia App1
  3. APP0 attende App1 per uscire con Process.WaitExit()
  4. APP0 lancia App2 e si esce

L'app di console di esempio allegata di seguito mostra un caso molto semplice: la mia app di esempio avvia prima il blocco note. Quindi, quando il blocco note si chiude, avvia mspaint ed esce da solo.

Se si desidera nascondere la console, è possibile semplicemente impostare la proprietà "Tipo di output" da "Applicazione console" a "Applicazione Windows" nella scheda "Applicazione" della Proprietà progetto.

codice di esempio:

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

Utilizzare Process class quando si esce dalla prima applicazione.

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

nel qual caso devo iniziare a seconda applicazione, sia che si tratti di chiusura modulo o modulo chiuso (prima applicazione) –

+0

Non importa (a meno che non si annulli la chiusura in "Chiusura"), sin Il processo ce viene avviato in modo asincrono e non impedirà alla tua applicazione di continuare a fare qualsiasi cosa si supponga di fare, incluso lo spegnimento. –

3

Si può solo sborsare off ad esso, in modo che quando si sta per chiudere la prima applicazione basta avviare la seconda applicazione tramite: la classe di

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

Alcuni codice di esempio:

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