Как и когда закрыть окно WPF, запущенное в другом потоке в надстройке Office VSTO - PullRequest
0 голосов
/ 08 июня 2018

В Excel я показываю окно WPF, которое работает в новом потоке. Существует множество ссылок на него в stackoverflow, это всего лишь один.

Проблема в том, что если пользователь после открытия окна WPF немедленно закрывает Excel, то Excel, кажется, зависает, но в конечном итоге закрываетокно.Кажется, что для закрытия окна и вызова Dispatcher.InvokeShutdown требуется очень много времени.

Кто-нибудь знает о более раннем событии в Excel или надстройке, чем событие закрытия окна для вызова Dispatcher.InvokeShutdown?Я добавил PROC с помощью Win API в окне WPF, но в моем тестировании Excel не (хотя и является владельцем окна) не отправляет стандартные сообщения в окно для закрытия.

1 Ответ

0 голосов
/ 06 июля 2019

причина: 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...