Может ли ошибка в простом программировании WPF вызвать синий экран? - PullRequest
5 голосов
/ 30 января 2010

Я занимался программированием на .NET в WPF, который включал чтение файлов .png и .txt, размещение изображений на холсте, их перемещение, а затем их удаление, и внезапно я получаю синий экран. Я не думал, что мои небольшие изменения могут вызвать проблемы с драйвером, пока я не перезапустил и не сделал то же самое с моей программой, и я получил другую ошибку драйвера. Похоже, что драйвер графической системы Intel вышел из строя, и мое разрешение снизилось. Впрочем, во второй раз нет синего экрана. Я играл довольно быстро и свободно, добавляя и удаляя элементы из дочерних элементов холста. Мой вопрос: как такое простое программирование может вызвать такую ​​серьезную ошибку и как ее исправить?

Ответы [ 3 ]

6 голосов
/ 30 января 2010

В качестве первого приближения все голубые экраны вызваны ошибочными гонщиками, а большинство ошибок гонщиков связаны с условиями гонки. (см. сноску 1 ) То есть - это не обязательно конкретные операции, а точное время их взаимодействия с другими вещами, которые находятся вне вашего контроля.

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

примечания:

1 Конечно, не все голубые экраны являются драйверами, но они являются все из режима ядра, для кода пользовательского режима никогда не должно быть возможности вызывать сбои в режиме ядра. Таким образом, когда вы нажимаете синий экран, вы обнаружили ошибку в каком-то компоненте, который работает в режиме ядра. Синий экран по определению не ваша ошибка ( 2 ) (или не только ваша ошибка).

2 , если вы не пишете драйверы.

5 голосов
/ 30 января 2010

Похоже, у вас глючит графический драйвер. WPF сам по себе не может вызвать синий экран - но WPF вызывает DirectX, который, в свою очередь, вызывает графический драйвер - и если графический драйвер содержит ошибки, эти могут вызывать синий экран.

Вы не можете исправить это на уровне WPF, потому что WPF невиновен в этой конкретной проблеме. Вам необходимо обновить графический драйвер. Возможный обходной путь, если нет обновлений или последняя версия не исправляет это, состоит в том, чтобы отключить аппаратное ускорение для WPF, поскольку это может избежать попадания в ошибочный бит драйвера.

1 голос
/ 31 января 2010

Попробуйте отключить аппаратный рендеринг WPF (DirectX) и посмотрите, исчезла ли ваша проблема:

Настройки реестра рендеринга графики

Отрывок:

ОтключитьПараметр аппаратного ускорения

HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Avalon.Graphics \ DisableHWAcceleration

DWORD

Параметр отключения аппаратного ускорения позволяет отключить аппаратное ускорение в целях отладки и тестирования,Когда вы видите артефакты рендеринга в приложении, попробуйте отключить аппаратное ускорение.Если артефакт исчезает, возможно, проблема связана с вашим видеодрайвером.

Параметр отключения аппаратного ускорения - это значение DWORD, равное 0 или 1. Значение 1 отключает аппаратное ускорение.Значение 0 включает аппаратное ускорение при условии, что система соответствует требованиям к аппаратному ускорению;Для получения дополнительной информации см. Уровни рендеринга графики.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...