Я немного отклоняюсь от приведенного выше, поскольку я поддерживаю список открытых инспекторов (я завершаю инспектор и сохраняю это в списке). Добавление их в новое событие инспектора и удаление их при закрытом закрытом закрытии.
В моем ленточном коде у меня есть статический метод FindOutlookInspector, который находит инспектора, используя control.context ленты.
Что-то вдоль этих линий ..
OutlookInspector мой обернутый класс инспектор, но вы не можете что и т.д. Кроме того, я забочусь только о отправлений
void _inspectors_NewInspector(Microsoft.Office.Interop.Outlook.Inspector Inspector) {
OutlookItem olItem = null;
try {
object newitem = Inspector.CurrentItem;
olItem = new OutlookItem(newitem);
if (olItem.Class == Outlook.OlObjectClass.olMail && olItem.MessageClass == "IPM.Note") {
OutlookInspector existingWindow = FindOutlookInspector(Inspector);
if (existingWindow == null) {
OutlookInspector window = new OutlookInspector(Inspector);
window.Close += new EventHandler(WrappedWindow_Close);
_windows.Add(window);
}
} catch (Exception ex) {
throw ex;
}
}
void WrappedWindow_Close(object sender, EventArgs e) {
OutlookInspector window = (OutlookInspector) sender;
window.Close -= WrappedWindow_Close;
_windows.Remove(window);
}
internal static OutlookInspector FindOutlookInspector(object window) {
foreach(OutlookInspector inspector in _windows) {
if (inspector.Window == window) {
return inspector;
}
}
return null;
}
Затем в коде ленты смогу звоните FindOutlookInspector
получить обернутой инспектору
OutlookInspector window = ThisAddIn.FindOutlookInspector(control.Context);
@ 76mel Убедитесь, что явно способствовал снижению COM-ссылки пункта о bjects. YMMV. – 2009-11-12 17:54:10