Что приводит к сбою приложения UWP и выбрасыванию Windows.UI.Xaml.dll! CfocusRectManager error - PullRequest
0 голосов
/ 15 февраля 2019

Мы разрабатываем приложение 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=????????????????

Наше приложение представляет собой довольно простое двухстраничное приложение-головоломку, где первая страница - это, в основном, домашняя страница, которая используется для запускаигровое поле.

Первая страница отображается на мгновение до того, как приложение вылетает.

Мы попытались изолировать любой наш асинхронный код в конструкторе страниц, закомментировав его, но сбой все еще происходит.

Есть мысли о том, что может быть причиной сбоев?

1 Ответ

0 голосов
/ 15 февраля 2019

После дальнейших экспериментов я наткнулся на проблему и обнаружил супер простое повторение, которое демонстрирует причину сбоя, а также проверяет нашу работу.

Преступник - это кнопочный элемент управления со следующей настройкой свойства:

FocusVisualPrimaryBrush="{x:Null}"

Чтобы воспроизвести проблему:

  • создайте совершенно новый универсальный проект Windows типа Blank App (Universal Windows)
  • и добавьте кнопку в существующуюУправление сеткой
<Button HorizontalAlignment="Center" Width="100" Height="100" FocusVisualPrimaryBrush="{x:Null}" />

Обратите внимание, что если вы начнете отладку нажатием клавиши F5, вы можете не увидеть ошибку.Однако, если вы запускаете без отладки, нажимая Ctrl-F5, новое приложение вылетает через несколько секунд после запуска.

Наше приложение использует Eye Control, поэтому видимый прямоугольник фокуса вокруг первого элемента управления в порядке вкладок отвлекаетпоэтому я установил FocusVisualPrimary в окне «Свойства» на «Нет кисти», который был источником значения {x: Null} в определении Xaml для кнопки.

В качестве обходного пути я смог изменитьодна строка:

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

и прямоугольник фокуса не отвлекал и приложение перестало падать.

В качестве продолжения я искал в моем коде все вхождения установленного FocusVisualPrimaryBrushв Null и обнаружил в приложении несколько других случаев, которые могли произойти из-за копирования / вставки оригинальной кнопки.Помимо сбоя при запуске, я также обнаружил, что вкладка для элемента управления, для которого FocusVisualPrimaryBrush установлено в значение Null, также вызовет внезапный сбой приложения.С тех пор я удалил или заменил все вхождения "{x: Null}" на "Прозрачный".

...