Мой проект WPF использует новые острова XAML с помощью элемента управления WindowsXamlHost из WPF Toolkit.
Это работало хорошо для меня до тех пор, пока мне не пришлось создавать новое диалоговое окно с другим WindowsXamlHost, встроенным в новое окно.Я получил ошибку «Метод AttachToWindow не выполнен, поскольку указанный HWND происходит из другого окна верхнего уровня, чем HWND, который был ранее передан» ( больше подробностей ).
Итак, чтобы обойти это, я должен открыть это диалоговое окно, используя отдельный поток.
Thread windowThread = new Thread(delegate ()
{
SynchronizationContext.SetSynchronizationContext(
new DispatcherSynchronizationContext(
Dispatcher.CurrentDispatcher));
SettingsDialogWindow dialog = new SettingsDialogWindow()
{
};
dialog.Closed += (s, args) => Dispatcher.CurrentDispatcher.BeginInvokeShutdown(DispatcherPriority.Background);
dialog.Show();
Dispatcher.Run();
});
windowThread.SetApartmentState(ApartmentState.STA);
windowThread.Start();
Но теперь у меня есть проблемы с закрытием этого окна и прекращением потока.Я получаю еще одну ошибку «Необработанное исключение в 0x74865D0B (ucrtbase.dll) в MyApp.WPF.Core.exe: запрошен фатальный выход из программы».
Как правильно выйти из этого окна и завершить поток?Фрагмент кода работает нормально, если я удаляю WindowsXamlHost:
<uwpHost:WindowsXamlHost Panel.ZIndex="0"
Grid.Row="0"
ChildChanged="WindowsXamlHost_ChildChanged"
InitialTypeName="MyApp.UWP.Views.Core.SettingsUserControl"/>