WPF не отвечает на вопросы интерфейса - PullRequest
1 голос
/ 02 декабря 2011

У меня есть приложение, которое отображает странное поведение, и я не могу понять это. В основном мое приложение запускается и пытается подключиться к внешнему оборудованию, подключенному через USB. Пока это продолжается, я отображаю «занятое» окно, в котором есть несколько простых анимаций. Однако время от времени пользовательский интерфейс полностью зависает (анимация и все) во время инициализации оборудования.

Дело в том, что проблема временная, и я уже убедился, что она работает в фоновом потоке (через Task.StartNew). Я попытался заменить вызовы инициализации оборудования такими вещами, как «Thread.Sleep (5000)», чтобы имитировать зависание, и пользовательский интерфейс ведет себя правильно, так что я не в курсе идей.

Возможно ли, что само оборудование (и неуправляемая библиотека, которую я использую для взаимодействия с ним) каким-то образом влияет на систему и вызывает проблему? Я бы очень не хотел прибегать к обвинению в оборудовании, но есть ли какой-то другой способ исследования или другая возможная проблема с программным обеспечением, которую я пропускаю?

Ответы [ 2 ]

2 голосов
/ 03 декабря 2011

Вы подключаетесь к устройству с помощью библиотеки COM?Если COM вводится как STA, он может в конечном итоге делегировать часть своей работы потоку пользовательского интерфейса, вызывая блокирующий вызов в другом потоке, который иногда также блокирует основной поток пользовательского интерфейса.Очень раздражает, я знаю.Компоненты COM с хорошим поведением этого не сделают, но я сталкивался с этим раньше.Вы можете определить, происходит ли это, изолировав только вызов, вызывающий блокировку в тестовом приложении, и больше ничего не происходит.Создать таймер пользовательского интерфейса и записывать тики.Если галочки перестают срабатывать при вызове метода COM в отдельном потоке, компонент COM ведет себя плохо.

1 голос
/ 02 декабря 2011

Я бы проверил, если изменение родства процесса имеет значение.Может случиться так, что драйвер usb небрежен и требует много времени при аппаратном прерывании.Это может заблокировать любой поток, работающий в ядре, которое обслуживает прерывание.

Могут быть и другие объяснения, но если проблема связана с конкретным ядром, это говорит о том, что проблема в драйвере.

Обратите внимание, что мои знания о моделях драйверов для Windows устарели, поэтому, возможно, это не поможет.

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