我的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"/>