如何以及何时关闭在Office VSTO插件

时间:2018-06-08 06:42:51

标签: excel wpf vsto

在excel中,我正在显示一个在新线程上运行的WPF窗口。 There are numerous references to it in stackoverflow this is but one.

问题是,如果用户在打开WPF窗口后立即关闭Excel,则Excel似乎挂起但最终会关闭窗口。关闭窗口并调用Dispatcher.InvokeShutdown似乎需要很长时间。

是否有人知道Excel或Addin中的早期事件比调用Dispatcher.InvokeShutdown的窗口的close事件更新?我在WPF窗口上使用Win API添加了一个PROC,但在我的测试Excel中没有(即使它是窗口的所有者)将标准消息发送到窗口关闭。

1 个答案:

答案 0 :(得分:0)

原因:excel在引发关闭事件之前先处理任务窗格。

解决方法: (确保已选中ShowAllFiles,否则找不到Designer.vb)

ThisAddin.vb:添加您的处置代码

Protected Sub PrepareShutdown
  'Close your wpf windows/controls.
  'Including Dispatcher.CurrentDispatcher.InvokeShutdown()
End Sub

ThisAddin.Designer.vb:将现有块更改为

Protected Overrides Sub OnShutdown()
        PrepareShutdown()
        Me.VstoSmartTags.Dispose()
        Me.CustomTaskPanes.Dispose()
        MyBase.OnShutdown()
End Sub

hth,keepITcool