Outlook VSTO ne se déclenche pas lors d'un événement NewMailEx?
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?
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.