2012-04-07 7 views
0

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); 
     } 
    } 

Antwort

1

Ihre for-Schleife ist höchstwahrscheinlich das Einfrieren Ihres UI-Threads. Starten Sie Ihre for-Schleife in einem anderen Thread.

Hier ist ein Beispiel, das das Rx-Framework verwendet, um Ihren Wert als asynchronen Datenstrom zurückzugeben.

+0

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

+0

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

+0

@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

Verwandte Themen