Я работаю над приложением WPF, использующим System.AddIn, для решения проблемы утечки памяти, возникшей у нас с элементом управления на основе Windows Forms, который был обернут в элемент управления WindowsFormsHost. Надстройка используется для загрузки и выгрузки элемента управления на основе Windows Forms, так как необходимо избегать накладных расходов WindowsFormsHost, который будет зависать до закрытия приложения в текущей версии WPF и утечки памяти в элементе управления на основе Windows Forms из-за плохая логика очистки.
Проблема, с которой мы сталкиваемся, заключается в том, что после загрузки и выгрузки надстройки в приложении приложение WPF выдает исключение Win32 «Недопустимый дескриптор окна» при выходе из приложения. Как правило, это не будет страшной проблемой, однако, хотя можно поймать исключение, оно не мешает Windows видеть приложение как сбойное и отображать диалоговое окно сбоя в Windows 7, а это недопустимо.
В отношении кода соответствующие факты:
Исключение возникает только в том случае, если надстройка загружается и выгружается хост-приложением WPF. Мы удаляем элемент управления WindowsFormsHost и элемент управления на основе Windows Forms в надстройке как часть пользовательского метода Dispose, вызываемого перед выгрузкой надстройки.
Надстройка завершает работу своих Диспетчеров перед выгрузкой (как часть описанного выше процесса удаления), что было отмечено в документации MSDN и публикациях в блогах, что необходимо для решения этой проблемы, которая не возникала в этом случае.
У нас нет выбора в использовании элемента управления на основе Windows Forms, поскольку он требуется для некоторых отчетов, и для преобразования требуется слишком много файлов отчетов, а также нет подходящей версии WPF и времени для ее изменения.
Я не могу предоставить примеры кода, поэтому я обращаюсь к любым мыслям или предыдущему опыту с таким сценарием на случай, если я что-то пропустил.