2009-03-23 1 views
26

Ho scritto un # applicazione C che utilizza System.Diagnostics.Process classe per creare un processo, utilizzandoprocess.close() non è di terminazione processo creato, C#

Process P1 = new Process(); 
P1.FileName = "myexe.exe"; 

e altre impostazioni corrette.

L'ho collegato a un file exe che viene eseguito per circa 10 minuti. (Sto scrivendo un programma per misurare il tempo di esecuzione dei programmi). Ora nel frattempo voglio interrompere il processo in esecuzione. Così ho scritto in eventi del pulsante di annullamento,

Process.Close(); 

Ma nel task manager vedo ancora in esecuzione MYEXE.EXE, non ottiene interrotta. Cosa fare?

risposta

49

Process.Close() non è stato progettato per interrompere il processo, ma solo per rilasciare la vista "locale" sul processo e le risorse associate.

Penso che voglia dire Process.Kill() o Process.CloseMainWindow(). Personalmente proverei a trovare un modo più aggraziato per chiuderlo.

+5

e quale sarebbe? svuotare tutti i flussi e quindi inviare il metodo di interruzione interna se l'exe sottostante lo supporta? –

+0

@Anirudh - Penso che intenda "Perché è necessario forzare la chiusura dell'app?". Abortire un processo nel mezzo dell'esecuzione non è solitamente favorevole perché porta alla corruzione dei dati. – StingyJack

+5

Di solito provo a indicare l'app "per favore spegni ora" invece di ucciderla. Se controlli l'app, potresti far sì che il suo processo genitore vada via. –

4

Penso che Process.Kill() sia quello che stai cercando.