Question

J'ai créé un VSTO en C # censé accrocher l'événement NewMailEx d'Outlook 2007. Cependant, il ne se déclenche pas parfois lorsque je fais un envoi / une réception manuel ou lorsqu'il n'y a qu'un seul courrier non lu dans la boîte de réception. On dirait presque que la boîte de réception se déclenche AVANT que le message arrive.

Existe-t-il un meilleur moyen de surveiller les nouveaux messages à chaque fois en dehors de ItemAdd ou NewMailEX à l'aide de VSTO?

Était-ce utile?

La solution

La raison en est: "GC collecte l'objet .NET, qui encapsule l'objet COM à partir d'Outlook)". La solution est une référence à cet objet .NET. Le moyen le plus simple est:

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

Vous pouvez également avoir un champ spécial pour ce bouton (ou d’autres) boutons concrets (ou d’autres objets), si vous le souhaitez. Mais c’est la solution la plus courante.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top