De Start metode for Prosess objektet er muligens et av de mest undervurderte verktøyene som er tilgjengelige for en programmerer. Som en .NETT metode, Start har en rekke overbelastninger, som er forskjellige sett med parametere som bestemmer nøyaktig hva metoden gjør. Overbelastningen lar deg spesifisere omtrent ethvert sett med parametere du kanskje vil overføre til en annen prosess når den starter.
Hva du kan gjøre med Prosess. Start er egentlig bare begrenset av prosessene du kan bruke med den. Hvis du vil vise den tekstbaserte ReadMe-filen i Notisblokk, er det like enkelt som:
Prosess. Start ( "ReadMe.txt")eller.
Prosess. Start ("notisblokk", "ReadMe.txt")
Dette eksemplet antar at ReadMe-filen er i samme mappe som programmet og at Notisblokk er standardapplikasjonen for .txt-filtyper, og at den er i systemmiljøstien.
Prosess. Start lignende Shell Command i VB6
For programmerere kjent med Visual Basic 6, Prosess. Start er noe som VB 6 Shell kommando. I VB 6 vil du bruke noe som:
lngPID = Shell ("MyTextFile.txt", vbNormalFocus)
Bruker prosess. Start
Du kan bruke denne koden til å starte Notisblokk maksimert og opprette en ProcessStartInfo objekt som du kan bruke for mer presis kontroll:
Demp prosessegenskaper som ny prosessStartInfo
ProcessProperties. FileName = "notisblokk"
ProcessProperties. Arguments = "myTextFile.txt"
ProcessProperties. WindowStyle = ProcessWindowStyle. maksimert
Dim myProcess As Process = Process. Start (ProcessProperties)
Starte en skjult prosess
Du kan til og med starte en skjult prosess.
ProcessProperties. WindowStyle = ProcessWindowStyle. skjultMen vær forsiktig. Med mindre du legger til mer kode for å avslutte prosessen, må du sannsynligvis avslutte den i Oppgavebehandling. Skjulte prosesser brukes vanligvis bare med prosesser som ikke har noen form for brukergrensesnitt.
Henter navnet på en prosess
Jobber med Prosess. Start som .NET-objekt gir deg mye kapasitet. For eksempel kan du hente navnet på prosessen som ble startet. Denne koden vil vise "notisblokk" i utgangsvinduet:
Dim myProcess As Process = Process. Start ("MyTextFile.txt") -konsoll. WritLine (myProcess. ProcessName)Dette var noe du kunne ikke gjøre med VB6 Shell fordi den lanserte den nye applikasjonen asynkront. Ved hjelp av WaitForExit kan forårsake det motsatte problemet i .NET fordi du må starte en prosess i en ny tråd hvis du trenger den for å utføre asynkront. Hvis du for eksempel trenger komponentene for å forbli aktive i en form der en prosess ble lansert og WaitForExit ble henrettet. Vanligvis vil ikke disse komponentene være aktive. Kod det opp og se selv.
En måte å tvinge prosessen til å stoppe er å bruke Drepe metode.
myProcess. Drepe()
Denne koden venter i ti sekunder og avslutter deretter prosessen.
Noen ganger er det imidlertid nødvendig med en forsinket forsinkelse for å la prosessen fullføre avkjørsel for å unngå en feil.
myProcess. WaitForExit (10000)
'hvis prosessen ikke fullføres innen
10 sekunder, drep det
Hvis ikke myProcess. HasExited Then
myProcess. Drepe()
Slutt om
Threading. Tråd. Sov (1)
Console. WriteLine ("Notisblokk avsluttet:" _
& myProcess. ExitTime & _
Miljø. Ny linje & _
"Avslutt kode:" & _
myProcess. ExitCode)
I de fleste tilfeller er det sannsynligvis en god idé å legge behandlingen i en Ved hjelp av blokkering for å sikre at ressursene som brukes av prosessen frigjøres.
Bruke myProcess As Process = Ny prosess
'Koden din går her
Slutt å bruke
For å gjøre alt dette enda enklere å jobbe med, er det til og med en Prosess komponent som du kan legge til i prosjektet ditt, slik at du kan gjøre mange tingene som er vist ovenfor på designtid i stedet for kjøretid.
Noe av det som gjør det enklere er koding av hendelser løftet av prosessen, for eksempel hendelsen når prosessen har gått ut. Du kan også legge til en behandler som bruker kode som denne:
la prosessen løfte hendelser
myProcess. EnableRaisingEvents = True
'legge til en avsluttet hendelsesbehandler
AddHandler myProcess. Gå ut, _
AddressOf Me. ProcessExited
Private Sub ProcessExited (ByVal avsender som objekt, _
ByVal e As System. EventArgs)
'Koden din går her
Slutt sub
Men det er ganske mye enklere å velge arrangementet for komponenten.