【问题标题】:What is causing UWP app to intermittently crash and throw Windows.UI.Xaml.dll!CfocusRectManager error是什么导致 UWP 应用间歇性崩溃并引发 Windows.UI.Xaml.dll!CfocusRectManager 错误
【发布时间】:2019-07-09 03:43:17
【问题描述】:

我们正在开发 UWP 应用程序,并注意到在 Visual Studio 中启动调试过程时出现间歇性崩溃。

Exception Unhandled
Unhandled exception at 0x00007fff8f9ac10c (Windows.UI.Xaml.dll) in
[ourAppName].exe: 0xC0000005: Access violation reading location
0x0000000000000000

我们还看到,在将 AppX 包旁加载到特定机器上而不是在其他机器上后,应用程序的发布版本在启动时崩溃。当调试器附加到该机器上的进程时,错误是:

(7ebc.7298): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
Windows_UI_Xaml!CFocusRectManager::GetFocusOptionsForElement+0x158:
00007ff9`43d7c10c 488b01          mov     rax,qword ptr [rcx]
ds:00000000`00000000=????????????????

我们的应用程序是一个相当简单的两页益智游戏应用程序,其中第一页基本上是用于启动游戏板的主页。

在应用程序崩溃之前会显示第一页。

我们尝试通过注释掉页面构造函数中的任何异步代码来隔离它,但崩溃仍然发生。

对导致崩溃的原因有什么想法吗?

【问题讨论】:

    标签: c# visual-studio uwp-xaml


    【解决方案1】:

    经过进一步的实验,我偶然发现了这个问题,并找到了一个超级简单的重现,它可以演示崩溃的原因并验证我们的解决方法。

    罪魁祸首是具有以下属性设置的按钮控件:

    FocusVisualPrimaryBrush="{x:Null}"
    

    重现问题:

    • 创建一个全新的空白应用类型的 Windows 通用项目(通用 Windows)
    • 向现有的 Grid 控件添加按钮
    <Button HorizontalAlignment="Center" Width="100" Height="100" FocusVisualPrimaryBrush="{x:Null}" />
    

    请注意,如果您按 F5 开始调试,您可能看不到错误。 但是,如果您通过按 Ctrl-F5 启动而不进行调试,则新应用将在启动几秒钟后崩溃。

    我们的应用程序使用 Eye Control,因此选项卡顺序中第一个控件周围的可见焦点矩形会分散注意力,因此我将“属性”窗口中的 FocusVisualPrimary 设置为无画笔,这是 {x:Null} 值的来源在 Button 的 Xaml 定义中。

    作为一种解决方法,我能够将这一行更改为:

    <Button HorizontalAlignment="Center" Width="100" Height="100" FocusVisualPrimaryBrush="Transparent" />
    

    焦点矩形并没有分散注意力,应用程序停止崩溃。

    作为后续行动,我在代码中搜索了所有将 FocusVisualPrimaryBrush 设置为 Null 的情况,并在应用程序中发现了一些其他实例,这些实例可能是由于复制/粘贴原始按钮而发生的。除了在启动时崩溃之外,我还发现使用 Tab 键切换到 FocusVisualPrimaryBrush 设置为 Null 的控件也会导致应用程序突然崩溃。从那以后,我已经将所有出现的“{x:Null}”删除或替换为“透明”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-09
      • 2019-04-08
      • 2017-12-06
      • 1970-01-01
      • 2021-11-27
      • 2019-06-29
      • 1970-01-01
      相关资源
      最近更新 更多