Армандо!Большое спасибо за вашу помощь!
Я обнаружил, что есть интерфейс IDTExtensibility2, в котором размещаются уведомления о событиях, возникающих в надстройках, например, когда они загружаются, выгружаются, обновляются и т. Д.Поэтому я использую этот интерфейс с классом ExcelComAddIn в пространстве имен ExcelDna.Integration:
public class ExcelComAddIn : IDTExtensibility2
{
public ExcelComAddIn();
protected string ProgId { get; }
public virtual void OnAddInsUpdate(ref Array custom);
public virtual void OnBeginShutdown(ref Array custom);
public virtual void OnConnection(object Application, ext_ConnectMode ConnectMode, object AddInInst, ref Array custom);
public virtual void OnDisconnection(ext_DisconnectMode RemoveMode, ref Array custom);
public virtual void OnStartupComplete(ref Array custom);
}
Я заметил, что метод OnBeginShutdown () запускается ПОСЛЕ диалогового окна!и это то, что я искал, поэтому я избавился от события WorkbookBeforeClose, переопределил метод OnBeginShutdown () и поместил свой код, который был в событии WorkbookBeforeClose, в OnBeginShutdown () следующим образом:
public override void OnBeginShutdown(ref Array custom)
{
base.OnBeginShutdown(ref custom);
//I PUT MY CUSTOM CODE HERE:
CloseAllPanes();
ExcelTaskExecutor.Destroy();
}
И теперь, если пользователь выбирает нажать «отмена» в диалоговом окне сохранения, OnBeginShutdown () не запускается, и мои панели все еще там!
В любом случае, ваши подходы очень крутые, и если это не такс вашей помощью у меня никогда не было возможности выяснить, что происходит, и спасибо, что помогли мне найти это решение.