Verwenden sie Visual C#, um zu warten, bis eine Shellanwendung abgeschlossen ist.
In diesem Artikel wird erläutert, wie Sie mithilfe der Microsoft .NET Framework-Klasse Process eine andere Anwendung aus Ihrem Code starten und den Code warten lassen, bis die andere Anwendung geschlossen wird, bevor sie fortgesetzt wird.
Originalversion des Produkts: 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 beendet oder vom Benutzer geschlossen wird.
- Geben Sie einen Timeoutzeitraum an, nach dem Sie die Anwendung aus Ihrem Code schließen können.
In diesem Artikel werden zwei Codebeispiele vorgestellt, die beide Ansätze veranschaulichen. Darüber hinaus ermöglicht das Timeoutbeispiel die Möglichkeit, dass die andere Anwendung möglicherweise nicht mehr reagiert (aufgehängt) und die erforderlichen Schritte zum Schließen der Anwendung ausführt.
Dieser Artikel bezieht sich auf den folgenden .NET Framework KlassenbibliotheksnamespaceSystem.Diagnostics.
Namespaces einschließen
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 gestartet (in diesem Fall Editor) 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 wird auf 5 Sekunden festgelegt. Möglicherweise möchten Sie 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, das Hängen Ihrer Anwendung zu verhindern, da die andere Anwendung aufgehängt wurde. Timeouts eignen sich besser für eine Shellanwendung, die eine Hintergrundverarbeitung durchführt, bei der der Benutzer möglicherweise nicht weiß, dass die andere Anwendung ins Stocken geraten ist oder keine bequeme Möglichkeit zum Schließen hat.