2017-07-20 1 views
1

ich diese Codes ausgeführt wird:WaitForExit nicht funktioniert, wenn die Anwendung bereits

Process MSWprocess = new Process(); 
if (CommandToMSWord[1][1] == "Edit") 
{ 
    MSWprocess = Process.Start(PatientLetterDocx); 
} 
MSWprocess.WaitForExit(); 
if (CommandToMSWord[2][1].ToUpper() == "FALSE" && MSWprocess.HasExited) 
{ 
    File.Delete(PatientLetterDocx); 
} 

Worin MSWprocess würde ein MS Word-Dokument eröffnen und wenn der Benutzer automatisch will diese an der Ausfahrt sparen, sollte CommandToMSWord[2][1].ToUpper() sein TRUE, Andernfalls wird das Dokument beim Schließen des MS Word-Dokuments gelöscht.

Wenn ich das Programm zum ersten Mal ausführe, wartet es, bis das MS Word geschlossen wird. Wenn ich eine andere Instanz desselben Programms ausführe, während die erste Instanz noch läuft (immer noch darauf wartend, dass das MS-Wort geschlossen wird), interessiert sich die zweite Instanz nicht mehr für die WaitForExit() und verursacht einen Laufzeitfehler, weil das Programm ist Löschen einer Datei, die noch geöffnet ist.

Wie ich es mag ist, dass selbst wenn das Programm mehrere Male gleichzeitig ausgeführt wird, sollte die WaitForExit() wirklich ihren Teil jedes Mal tun.

Haben Sie irgendwelche Ideen, warum dies nicht gleichzeitig für mehrere Instanzen funktioniert?

Vielen Dank im Voraus.

Antwort

0

Sie sollten stattdessen MSWprocess als lokale Variable deklarieren. Wie Sie nicht jedes Mal, wenn dieses Snippet ausgeführt wird, überschreibt es die Instanzvariable. Versuchen Sie es stattdessen.

var MSWprocess = Process.Start(PatientLetterDocx); 
+0

Ich habe meinen angegebenen Code bearbeitet und so habe ich ihn in meiner Quelle, daher konnte ich Ihre Antwort nicht verwenden. – spn

1

Dies ist, weil Word funktioniert. Wenn der Word-Prozess ausgeführt wird und Sie einen anderen Prozess zu Mittag essen, werden die Informationen an den ersten und zweiten Prozessexit weitergeleitet. Das Dokument wird vom ersten Prozess wirklich geöffnet. Sie können command line switches verwenden, um Word für Ihre Dateien einen separaten Prozess ausführen zu lassen. Wenn ich mich recht erinnere, ist es /t, obwohl ich derzeit Word nicht installiert habe, so kann ich das nicht überprüfen.

+0

Haben Sie eine Idee, wie ich diese Schalter in Process.Start() verwenden kann? – spn

+0

@spn Lesen Sie die Dokumentation der Process-Klasse. Es ist gut dokumentiert als fast alle. NET-Klassen –

Verwandte Themen