У меня есть программа, созданная группой разных людей за много разных лет.Некоторые приложения написаны на Winforms, некоторые написаны на WPF.У меня есть пользовательский элемент управления WPF, который я использую в некоторых окнах (WPF), и я пытаюсь поместить его в одно из окон Winforms моей программы.У меня есть версия этого элемента управления как для WPF, так и для WinForms, WinForms очень сложная и несколько глючная по сравнению с моей новой версией WPF, поэтому я помещаю ее в старое окно WinForms.
Этот пользовательский контроль WPFвнутри него есть элемент управления WinForms, потому что я не могу найти нужную мне версию элемента управления WPF (hexbox).Внутри формы winforms я разместил ElementHost, на котором размещен этот UserControl (WPF).Это работает очень хорошо, пока я не закрою окно, когда я получаю Win32Exception, говоря InvalidWindowHandle.Там нет полезной трассировки стека.
Когда я закрываю форму, я располагаю интерпретаторWPF, элемент-хост для него.При удалении интерпретатора WPF он, в свою очередь, располагает гексбокс и его WinFormHostedControl.
- интерпретаторWPF: пользовательский контроль WPF
- интерпретаторWPFElementHost: WinFormsElementHost
- PathfindingEditor:размещает все это
Когда я закрываю PathfindingEditor, я избавляюсь от многих вещей, чтобы предотвратить утечку памяти.
(pathfindingeditor.cs)
private void PathfindingEditor_FormClosing(object sender, FormClosingEventArgs e)
{
//Nullify things to prevent memory leaks
interpreterWPF.Dispose();
interpreterWPFElementHost.Child = null;
interpreterWPFElementHost.Dispose();
...
(interpreterwpf.xaml.cs)
public override void Dispose()
{
Interpreter_Hexbox = null;
Interpreter_Hexbox_Host.Child.Dispose();
Interpreter_Hexbox_Host.Dispose();
}
Я не уверен, что еще делать на этом этапе.Новый элемент управления WPF, который заменяет элемент управления winforms, намного проще и гораздо менее глючит.Было бы здорово изменить старую форму на WPF, но я не нашел подходящей библиотеки для сложной задачи, которую она должна выполнять, и у размещенных элементов Winforms в WPF есть много недостатков, поэтому я не пойду дальше, чем hexbox.
Я прочитал о Dispatcher.InvokeShutdown (), но, похоже, это полностью отключило поток пользовательского интерфейса WPF.Я сомневаюсь, что это то, что я ищу.