Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird gezeigt, wie Sie die Microsoft .NET Framework-Klasse Process verwenden, um eine andere Anwendung aus Ihrem Code zu starten und den Code warten zu lassen, bis die andere Anwendung geschlossen wird, bevor sie fortgesetzt wird.
Originalproduktversion: Visual C# .NET
Ursprüngliche KB-Nummer: 305369
Zusammenfassung
Wenn der Code auf den Abschluss der Anwendung wartet, gibt es zwei Optionen:
- Warten Sie auf unbestimmte Zeit, bis die andere Anwendung abgeschlossen ist oder vom Benutzer geschlossen wird.
- Geben Sie einen Timeoutzeitraum an, nach dem Sie die Anwendung aus Ihrem Code schließen können.
Dieser Artikel enthält zwei Codebeispiele, die beide Ansätze veranschaulichen. Darüber hinaus ermöglicht das Timeoutbeispiel die Möglichkeit, dass die andere Anwendung nicht mehr reagiert (nicht mehr reagiert hat) und die erforderlichen Schritte zum Schließen der Anwendung ausführt.
Dieser Artikel bezieht sich auf den folgenden .NET Framework Class Library-Namespace System.Diagnostics.
Einschließen von Namespaces
Sie sollten den Namespace für die Process Klasse importieren, bevor Sie die folgenden Beispiele ausführen. Platzieren Sie die folgende Codezeile vor der Namespace- oder Klassendeklaration, die das Codebeispiel enthält:
using System.Diagnostics;
Warten Sie auf unbestimmte Zeit, bis die Shellanwendung abgeschlossen ist.
Im folgenden Codebeispiel wird eine andere Anwendung (in diesem Fall Notepad) gestartet und auf unbestimmte Zeit gewartet, bis die Anwendung geschlossen wird:
//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...");
Bereitstellen eines Timeouts für die Shellanwendung
Im folgenden Codebeispiel wird ein Timeout für die Shellanwendung festgelegt. Das Timeout für das Beispiel ist auf 5 Sekunden festgelegt. Sie können diese Zahl (die in Millisekunden berechnet wird) für Ihre Tests anpassen.
//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...");
Problembehandlung
Manchmal kann es schwierig sein, zwischen diesen beiden Optionen zu wählen. Der Hauptzweck eines Timeouts besteht darin, zu verhindern, dass Ihre Anwendung hängen bleibt, da die andere Anwendung nicht mehr reagiert hat. Timeouts eignen sich besser für eine Shellanwendung, die Hintergrundverarbeitung durchführt, in der der Benutzer möglicherweise nicht weiß, dass die andere Anwendung angehalten wurde oder nicht bequem geschlossen werden kann.