Ich versuche, ein bestimmtes Word-Dokument pragmatisch zu öffnen und dann darauf zu warten, dass der Benutzer das geöffnete Dokument bearbeitet, bevor es weitergeht. Der Benutzer zeigt an, dass er das Fenster geschlossen hat.ein Dokument öffnen und darauf warten, dass ein Benutzer es bearbeitet
Der folgende Code wird jedoch nicht funktionieren! Es funktioniert so lange, bis ich das Dokument bearbeite: Alles bleibt nur stehen, bis auf die unendliche for-Schleife, die auf das Schließen des Dokuments wartet. Wie kann ich das beheben?
bool FormatWindowOpen;
string FormattedText = "";
MSWord.Application FormattingApp;
MSWord.Document FormattingDocument;
private List<string> ImportWords()
{
string FileAddress = FileDialogue.FileName;
FormattingApp = new MSWord.Application();
FormattingDocument = FormattingApp.Documents.Open(FileAddress);
FormattingDocument.Content.Text = "Format this document so it contains only the words you want and no other formatting. \nEach word should be on its own line. \nClose the Window when you're done. \nSave the file if you plan to re-use it." +
"\n" + "----------------------------------------------------------" + "\n" + "\n" + "\n" +
FormattingDocument.Content.Text; //gets rid of formatting as well
FormattingApp.Visible = true;
FormattingApp.WindowSelectionChange += delegate { FormattedText = FormattingDocument.Content.Text; };
FormattingApp.DocumentBeforeClose += delegate { FormatWindowOpen = false; };
FormatWindowOpen = true;
for (; ;){ //waits for the user to finish formating his words correctly
if (FormatWindowOpen != true) return ExtractWords(FormattedText);
}
}
Dies führt jedoch immer noch zu einer for-Schleife, da Threads keine Werte zurückgeben können. Wenn Sie lediglich einen Wert zwischen Main und dem Thread teilen, wird der Thread ständig überprüft. – Griffin
Macht nichts. Ich lege einfach alles außer die for-Schleife in einen anderen Thread, um die Rückgabe eines Wertes zu vermeiden. Vielen Dank! – Griffin
@Griffin: Wenn meine Antwort Sie zu einer Lösung für Ihr Problem führen würde, würden Sie bitte meine Antwort akzeptieren? - Sie können auch Ereignisse oder ein IObservable verwenden, um Ihren Wert an den Hauptthread zurückzugeben. – caesay