Ich arbeite derzeit an einem C# .NET Add-In für Microsoft Outlook. Das Ziel des Add-Ins ist, die Sucheingabe von der Outlook-Sofortsuche zu erfassen und in einem benutzerdefinierten Fenster meine eigenen Suchergebnisse anzuzeigen.Natives Fenster: Freigabe-Handle beim Schließen
Es funktioniert ziemlich gut, und mit Subclassing das Outlook-Fenster mit einem Native Window, erhalte ich die Suchzeichenfolge, und es übergibt das bereits in meinem Panel.
Das Problem ist jetzt, dass, wenn Sie die Add-In zu schließen (über "File-> Optionen-> Add-Ins-> COM-Add-In", aber nicht mit der X in der Scheibe) , das Add-In wird sofort beendet und ich kann searchboxWindow.ReleaseHandle()
nicht vorher aufrufen, um meine WndProc-Kette wiederherzustellen. Outlook stürzt einfach ohne sichtbare Fehler ab.
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
switch ((uint)m.Msg)
{
case WindowMessages.WM_DESTROY:
case WindowMessages.WM_QUIT:
case WindowMessages.WM_NCDESTROY:
this.ReleaseHandle();
return;
case WindowMessages.WM_KEYUP:
case WindowMessages.WM_LBUTTONDOWN:
case WindowMessages.WM_RBUTTONDOWN:
OnKeyUp();
break;
case WindowMessages.WM_EXITSIZEMOVE:
OnResize();
break;
}
}
Ich habe bereits versucht, auf ein paar Fensternachricht zu hören, die, wenn die Add-In geschlossen wird aufgerufen werden sollen, aber diese Meldungen erscheinen nur, wenn ich die Outlook in einer normalen Art und Weise zu schließen. Die Ereignisse in der Haupt-Add-In-Quelldatei wie AppDomain.CurrentDomain.ProcessExit
, this.Shutdown
oder ((Outlook.ApplicationEvents_10_Event)this.Application).Quit
werden nicht aufgerufen.
Welches Ereignis kann ich abhören, das (zuverlässig) ausgelöst wird, wenn das Add-In beendet wird? Sind dort welche? Wenn nicht, welche Alternativen habe ich, um mein Problem zu lösen?
Haben Sie Dipose() versucht und eine Methode an das Diposed-Ereignis angehängt, um sicherzustellen, dass sie tatsächlich entsorgt wurde? –
Ich implementierte die IDisposable-Schnittstelle und nannte die ReleaseHandle() dort, aber es hatte keine Auswirkungen? Meinst Du das? –
Verwenden Sie das Shutdown-Ereignis Ihres Add-Ins, um das Fenster von der Unterklasse zu entfernen. Der automatisch generierte Event-Handler ThisAddIn_Shutdown() hat eine gruselige Sprache, wird aber in diesem speziellen Szenario immer noch angesprochen. –