Диалог открытия проблем в отдельном потоке с API-интерфейсом хостинга XAML - PullRequest
0 голосов
/ 04 марта 2019

Мой проект 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"/>
...