2016-05-24 2 views
0

Ich habe eine Formularregion für das Lesefenster. Ich finde den Text für die Weiterleitung und füge dann dem Word-Dokument Informationen hinzu. Dies scheint zu funktionieren, wenn ich die E-Mail nicht in derselben Funktion erstelle und sende, aber wenn ich eine Weiterleitungs-E-Mail erstellen, bearbeiten und senden möchte, wird E-Mail.Body nicht aktualisiert.Email.Body nicht nach dem Bearbeiten von WordEditor

_email = this.OutlookItem as Outlook.MailItem; 
private void SendForwardEmail() 
{ 
    Outlook.MailIem fEmail = null; 
    Word.Document doc = null; 
    try 
    { 
     fEmail = ((Outlook._MailItem)_email).Forward(); 
     doc = GetWordEditor(fEmail); 
     EditDoc(doc); 
     var tmp = doc.Range().Text; 
     var tmp1 = fEmail.Body;  // tmp1 won't have what I added to tmp 
     ((Outlook._MailItem)fEmail).Send(); // This will send with the fEmail.Body value 
              // and won't show edits to the word doc 
    } 
    finally 
    { 
     Release(doc); 
     Release(fEmail); 
    } 
} 

ich ähnlichen Code in einem Formularbereich verwende E-Mails zum Komponieren, ist der Unterschied, dass zum Zeitpunkt des Send Ereignis ausgelöst wird, die Email.Body mit den Änderungen an das Wort doc aktualisiert hat. Ich habe versucht fEmail.Save(), aber scheint nicht zu funktionieren. Der Word-Editor speichert die Arbeit, weil ich auf den Word-Editor zu einem anderen Zeitpunkt zugreifen kann und die Änderungen noch bearbeitet werden. Die Email.Body wird einfach nicht mit den Änderungen aktualisiert.

EDIT: Ich füge hinzu, dass die folgende Aktualisierung der Email.Body, aber scheint wie eine funky Lösung.

fEmail.Display(); 
((Outlook.MailItem)fEmail).Close(Outlook.OlInspectorClose.olSave); 

Antwort

0

Wo und wann führen Sie den Code aus? Liegt es an einem sekundären Thread?

Wie auch immer, ich würde vorschlagen, mit der Veröffentlichung aller zugrunde liegenden COM-Objekte sofort beginnen. Verwenden Sie System.Runtime.InteropServices.Marshal.ReleaseComObject, um ein Outlook/Word-Objekt freizugeben, wenn Sie es nicht mehr verwenden. Setzen Sie dann in Visual Basic eine Variable auf Nothing (null in C#), um den Verweis auf das Objekt freizugeben. Lesen Sie mehr dazu im Artikel Systematically Releasing Objects.

+0

Die Funktion wird während eines Tastendruckereignisses im Formularbereich aufgerufen. Es läuft nicht auf einem sekundären Thread. – Natzely

Verwandte Themen