Frage

Ich habe eine VSTO in C # erstellt, die angeblich Outlook 2007 ist NewMailEx Ereignis Haken. Allerdings ist es manchmal nicht feuern, wenn ich eine manuelle Sende tun / empfangen, oder wenn es nur 1 ungelesene Nachrichten im Posteingang ist. Es scheint fast, als ob es auf dem Posteingang ausgelöst wird, bevor die Nachricht tatsächlich ankommt.

Gibt es eine bessere Art und Weise der Überwachung für neue Nachrichten jedes Mal neben ItemAdd oder NewMailEx mit VSTO?

War es hilfreich?

Lösung

Der Grund dafür ist: "GC das .NET-Objekt sammeln, whichc COM-Objekt aus Outlook Wrapps)". Die Lösung ist hold Bezug auf dieses NET-Objekt. Die Leichtigkeit Weg ist:

// this is helper collection.
// there are all wrapper objects
// , which should not be collected by GC
private List<object> holdedObjects = new List<object>();

// hooks necesary events
void HookEvents() {
    // finds button in commandbars
    CommandBarButton btnSomeButton = FindCommandBarButton( "MyButton ");
    // hooks "Click" event
    btnSomeButton.Click += btnSomeButton_Click;
    // add "btnSomeButton" object to collection and
    // and prevent themfrom collecting by GC
    holdedObjects.Add( btnSomeButton );
}

Sie können auch ein spezielles Feld für diese (und andere) Beton-Taste (oder eine andere Objekte), wenn Sie möchten. Aber dies ist die häufigste Lösung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top