Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln visar hur du använder Klassen Microsoft .NET Framework Process för att starta ett annat program från koden och låta koden vänta tills det andra programmet stängs innan det fortsätter.
Ursprunglig produktversion: Visual C# .NET
Ursprungligt KB-nummer: 305369
Sammanfattning
När koden väntar på att programmet ska slutföras finns det två alternativ:
- Vänta på obestämd tid för att det andra programmet antingen ska slutföras eller stängas av användaren.
- Ange en tidsgräns efter vilken du kan stänga programmet från koden.
Den här artikeln innehåller två kodexempel som visar båda metoderna. Dessutom tillåter timeout-exemplet möjligheten att det andra programmet kan ha slutat svara (hängt) och vidtar nödvändiga åtgärder för att stänga programmet.
Den här artikeln refererar till följande namnområde System.Diagnosticsför .NET Framework-klassbiblioteket .
Inkludera namnområden
Du bör importera namnområdet för Process klassen innan du kör exemplen som följer. Placera följande kodrad före namnområdet eller klassdeklarationen som innehåller kodexemplet:
using System.Diagnostics;
Vänta på obestämd tid för att det skalade programmet ska slutföras
Följande kodexempel startar ett annat program (i det här fallet Anteckningar) och väntar på obestämd tid på att programmet ska stängas:
//How to Wait for a Shelled Process to Finish
//Get the path to the system folder.
string sysFolder=
Environment.GetFolderPath(Environment.SpecialFolder.System);
//Create a new process info structure.
ProcessStartInfo pInfo = new ProcessStartInfo();
//Set the file name member of the process info structure.
pInfo.FileName = sysFolder + @"\eula.txt";
//Start the process.
Process p = Process.Start(pInfo);
//Wait for the window to finish loading.
p.WaitForInputIdle();
//Wait for the process to end.
p.WaitForExit();
MessageBox.Show("Code continuing...");
Ange en timeout för det gränssnittsbaserade programmet
Följande kodexempel anger en tidsgräns för det gränssnittsbaserade programmet. Tidsgränsen för exemplet är inställd på 5 sekunder. Du kanske vill justera det här talet (som beräknas i millisekunder) för testningen.
//Set a time-out value.
int timeOut=5000;
//Get path to system folder.
string sysFolder=
Environment.GetFolderPath(Environment.SpecialFolder.System);
//Create a new process info structure.
ProcessStartInfo pInfo = new ProcessStartInfo();
//Set file name to open.
pInfo.FileName = sysFolder + @"\eula.txt";
//Start the process.
Process p = Process.Start(pInfo);
//Wait for window to finish loading.
p.WaitForInputIdle();
//Wait for the process to exit or time out.
p.WaitForExit(timeOut);
//Check to see if the process is still running.
if (p.HasExited == false)
//Process is still running.
//Test to see if the process is hung up.
if (p.Responding)
//Process was responding; close the main window.
p.CloseMainWindow();
else
//Process was not responding; force the process to close.
p.Kill();
MessageBox.Show("Code continuing...");
Felsökning
Ibland kan det vara svårt att välja mellan dessa två alternativ. Det primära syftet med en timeout är att förhindra att programmet hänger sig eftersom det andra programmet har hängt sig. Tidsgränser är bättre lämpade för ett skalanpassat program som utför bakgrundsbearbetning, där användaren kanske inte vet att det andra programmet har stannat upp eller inte har ett bekvämt sätt att stänga det.