使用XAML托管API在

时间:2019-03-03 22:26:57

标签: c# multithreading uwp-xaml desktop-bridge windows-community-toolkit

我的WPF项目通过使用WPF Toolkit的WindowsXamlHost控件来使用新的XAML孤岛。

它对我来说一直很好,直到我不得不创建一个新的对话框窗口,并在新窗口中嵌入了另一个WindowsXamlHost为止。我收到错误消息“ AttachToWindow方法失败,因为指定的HWND来自与先前传递的HWND不同的顶级窗口”(more details)。

因此,为了解决这个问题,我必须使用单独的线程打开此对话框窗口。

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();

但是现在我遇到了关闭此窗口并终止线程的问题。我收到另一个错误“ MyApp.WPF.Core.exe中0x74865D0B(ucrtbase.dll)的未处理异常:请求致命程序退出。”

如何正确退出此窗口并终止线程?如果删除WindowsXamlHost,则该代码段可以正常工作:

    <uwpHost:WindowsXamlHost Panel.ZIndex="0"
    Grid.Row="0"
    ChildChanged="WindowsXamlHost_ChildChanged"
    InitialTypeName="MyApp.UWP.Views.Core.SettingsUserControl"/>

0 个答案:

没有答案