2016-04-09 11 views
0

Ich versuche, eine Terminserie Thema zu speichern. Dies funktioniert wie erwartet, aber nach dem Speichern, als ich move/edit das Kalenderelement durchgeführt habe, erhalte ich diesen Fehler.Outlook VSTO - Save AppointmentItem Eltern

enter image description here

-Code Fehler zu reproduzieren.

public void OnMyButtonClickContext(Office.IRibbonControl control) 
    { 

     var sel = control.Context as Microsoft.Office.Interop.Outlook.Selection; 
     var i = sel[1] as Microsoft.Office.Interop.Outlook.AppointmentItem; 

     i.Parent.Subject = i.Parent.Subject + " [CONFIRMED]"; 
     i.Parent.Save(); 

    } 

Ich habe versucht Einstellung i, auf null Marhsal.ReleaseComObject(i) verwenden. Keines davon scheint zu helfen.

Antwort

0

Ich sehe keine Freigabe COM-Anweisungen im Code. Welche Objekte haben Sie gerade versucht zu veröffentlichen?

Warum verwenden Sie immer die Parent-Eigenschaft der AppointmentItem-Klasse?

Bei jedem Aufruf der Parent-Eigenschaft wird der Referenzzähler erhöht. Und dann müssen Sie solche Objekte im Code freigeben.

Verwenden Sie System.Runtime.InteropServices.Marshal.ReleaseComObject, um ein Outlook-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 darüber im Systematically Releasing Objects Artikel. Hier

ist, was MSDN für es heißt:

Wenn Sie mit wiederkehrenden Termin Elemente arbeiten, sollten Sie alle früheren Referenzen freigeben, erhalten neue Hinweise auf die wiederkehrende Terminelement, bevor Sie den Artikel zugreifen oder sie verändern, und Geben Sie diese Referenzen frei, sobald Sie fertig sind, und speichern Sie die Änderungen. Diese Vorgehensweise gilt für das wiederkehrende AppointmentItem-Objekt und jedes Exception- oder RecurrencePattern-Objekt. Legen Sie das vorhandene Objekt auf Nothing fest, um einen Verweis in Visual Basic für Applikationen (VBA) oder Visual Basic freizugeben. Heben Sie in C# den Speicher für das Objekt explizit auf.

Beachten Sie, dass Ihre neue Referenz auch dann angezeigt wird, wenn Sie Ihre Referenz freigegeben haben und versuchen, eine neue Referenz zu erhalten, wenn noch eine aktive Referenz von einem anderen Add-In oder Outlook vorhanden ist zu einer veralteten Kopie des Objekts. Daher ist es wichtig, dass Sie Ihre Referenzen freigeben, sobald Sie mit dem wiederkehrenden Termin fertig sind.

Sieht so aus, als hätten Sie nicht alle zugrunde liegenden COM-Objekte im Code freigegeben.