Come utilizzare Process.Start in Visual Basic

Il progetto Inizia metodo del Processo L'oggetto è forse uno degli strumenti più sottovalutati a disposizione di un programmatore. Come metodo .NET, Inizia ha una serie di overload, che sono diversi set di parametri che determinano esattamente cosa fa il metodo. Gli overload consentono di specificare praticamente qualsiasi set di parametri che potresti voler passare a un altro processo all'avvio.

Con cosa puoi fare Process.Start è davvero limitato solo dai processi che puoi usare con esso. Se desideri visualizzare il tuo file Leggimi basato su testo in Blocco note, è facile come:

Process.Start ("ReadMe.txt")
Process.Start ("blocco note", "ReadMe.txt")

Questo esempio presuppone che il file Leggimi si trovi nella stessa cartella del programma e che Blocco note sia l'applicazione predefinita per i tipi di file .txt e si trovi nel percorso dell'ambiente di sistema.

Process.Start Simile al comando Shell in VB6

Per i programmatori che hanno familiarità con Visual Basic 6, Process.Start è un po 'come il VB 6 Conchiglia comando. In VB 6, useresti qualcosa come:

lngPID = Shell ("MyTextFile.txt", vbNormalFocus)

Utilizzo di Process.Start

È possibile utilizzare questo codice per avviare il Blocco note ingrandito e creare un file ProcessStartInfo oggetto che puoi utilizzare per un controllo più preciso:

Dim ProcessProperties come nuovo ProcessStartInfo
ProcessProperties.FileName = "blocco note"
ProcessProperties.Arguments = "myTextFile.txt"
ProcessProperties.WindowStyle = ProcessWindowStyle.Maximized
Dim myProcess As Process = Process.Start (ProcessProperties)

Avvio di un processo nascosto

Puoi persino avviare un processo nascosto.

ProcessProperties.WindowStyle = ProcessWindowStyle.Hidden

Recupero del nome di un processo

Lavorando con Process.Start come un oggetto .NET ti offre molte funzionalità. Ad esempio, puoi recuperare il nome del processo avviato. Questo codice mostrerà "blocco note" nella finestra di output:

Dim myProcess As Process = Process.Start ("MyTextFile.txt") Console.WriteLine (myProcess.ProcessName)

Questo era qualcosa che non potresti fare con il VB6 Conchiglia comando perché ha avviato la nuova applicazione in modo asincrono. Utilizzando WaitForExit può causare il problema inverso in .NET perché è necessario avviare un processo in un nuovo thread se è necessario che venga eseguito in modo asincrono. Ad esempio, se è necessario che i componenti rimangano attivi in ​​una forma in cui è stato avviato un processo e WaitForExit

Un modo per forzare l'interruzione del processo consiste nell'usare l'estensione Uccidere metodo.

myProcess.Kill ()

Questo codice attende dieci secondi e quindi termina il processo.

Tuttavia, a volte è necessario un ritardo forzato per consentire il completamento del processo in uscita per evitare un errore.

myProcess.WaitForExit (10000)
'se il processo non viene completato entro
'10 secondi, ammazzalo
If Not myProcess.HasExited Then
myProcess.Kill ()
End If
Threading.Thread.leep (1)
Console.WriteLine ("Blocco note terminato:" _
& myProcess.ExitTime & _
Ambiente.NewLine & _
"Codice di uscita:" & _
myProcess.ExitCode)

Nella maggior parte dei casi, è probabilmente una buona idea mettere la tua elaborazione in un file utilizzando blocco per garantire che le risorse utilizzate dal processo vengano rilasciate.

Utilizzo di myProcess As Process = New Process
'Il tuo codice va qui
Fine dell'utilizzo

Per rendere tutto questo ancora più facile da lavorare, c'è anche un file Processo componente che puoi aggiungere al tuo progetto in modo da poter fare molte delle cose mostrate sopra in fase di progettazione invece che in fase di esecuzione.

Una delle cose che questo rende molto più semplice è la codifica degli eventi generati dal processo, come l'evento quando il processo è terminato. Puoi anche aggiungere un gestore usando un codice come questo:

'consentire al processo di generare eventi
myProcess.EnableRaisingEvents = True
'aggiunge un gestore di eventi Exited
AddHandler myProcess.Exited, _
AddressOf Me.ProcessExited
Private Sub ProcessExited (ByVal sender As Object, _
ByVal e As System.EventArgs)
'Il tuo codice va qui
End Sub

Ma selezionare semplicemente l'evento per il componente è molto più semplice.