您绝对应该检查下一个链接:
https ://weblog.west-wind.com/posts/2019/Feb/14/WPF-Hanging-in-Infinite-Rendering-Loop?fbclid=IwAR23ZnUrz7buVpFLXOX2qQin1WcifQ6h280EO25URO74NTGDkTedx1TDRb4
这是该页面的引用:
使用 StarDefinitionsCanExceedAvailableSpace Override 此设置会覆盖新的 GridRendering 行为,基本上可以让您在项目中使用 .NET 4.7.x 目标运行,但保留以前版本中使用的旧行为。
可以在 app.config 中为您的应用程序设置一个配置设置:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace=true"
/>
</runtime>
</configuration>
我可以验证使用该开关可以让我运行 4.7.1 并且在任何缩放模式下都看不到锁定。在我之后
在 4.6.2 中运行我的版本后,我再次在一个单独的分支中升级到 4.7.1 来尝试这一点,并且确实该开关使应用程序以 4.7.1 为目标运行。所以有一个hacky的解决方法。
不过,这是一种解决方法。根据微软的说法,这个“修复”改进了网格渲染分配,提供更精确的大小,还提高了性能并减少了内存使用。在纸面上,这是一个很大的改进,但是......好吧,副作用
我怀疑这个问题并不普遍,因为没有太多关于它的信息。我认为 Markdown Monster 提出了这个问题,因为启动序列有很多窗口操作。MM 使用 MahApps UI 框架,该框架为主窗口使用窗口动画和额外的渲染帧,并且 MM 本身将窗口移出屏幕以进行初始渲染,并在窗口不适合屏幕时根据屏幕尺寸和 DPI 设置调整窗口大小否则会在屏幕外。IOW,将初始窗口放到屏幕上比简单的 WPF 表单更有可能遇到此错误。
所以我怀疑每个应用程序都需要担心这一点,但如果你有一个 4.7.x WPF 应用程序,那么在不同的分辨率和比例级别上尝试它可能是个好主意,只是看看它的表现如何。