c# - 使用 XAML 托管 API 在单独的线程上打开对话框时出现问题
问题描述
我的 WPF 项目通过使用 WPF 工具包的 WindowsXamlHost 控件来使用新的 XAML 岛。
直到我不得不创建一个新的对话框窗口,在新窗口中嵌入了另一个 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();
但现在我在关闭此窗口并终止线程时遇到问题。我收到另一个错误“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"/>
解决方案
推荐阅读
- reactjs - React-Testing-Library 无法对未安装的组件执行反应状态更新
- java - 如何重新初始化在 Java 中使用 null 值预定义的数组?
- python-3.x - 使用 Flask-SQLAlchemy 过滤 postgres STRING ARRAY 列
- python - 你如何结合 2 个 csv 文件的树莓派 python 代码?
- r - 根据 ID 将函数应用于列表
- auto-update - Collabora 自动更新单元格值
- python - 在 Python 中处理 CSV 文件 - 零导入/无库
- c# - 在 linq 查询中对多个列进行内部联接的类型推断错误
- gemfile - Gemfire - 如何限制/限制区域的 OQL 查询
- typo3 - 已弃用:自动 TCA 迁移