#wpf #lockup
#wpf #блокировка
Вопрос:
Я разрабатываю WPF-приложение, используя шаблон mvvm. И со мной возникла странная проблема. Есть форма, которая содержит элемент управления devexpress DXGrid. В presenter есть команда, привязанная к жесту двойного щелчка. При запуске команды создается новое окно, которое отображается с помощью заводского класса (используется метод Show())).
Итак, время от времени случается, что все приложение (все окна приложения) блокируется при отображении этого окна. Эта блокировка исчезает после того, как я фокусирую любое другое приложение.
Впервые эта проблема возникла после обновления версии devexpress. Затем эта проблема возникала каждый раз, когда показывалось новое окно после двойного щелчка по строке сетки. Проблема была частично исправлена путем установки свойства Owner нового окна.
Теперь эта проблема возникает время от времени. Кажется, что здесь задействованы потоки, но я не понимаю как. = (
p.s.: есть еще одна странная вещь, когда отображается новое окно и не возникает проблемы с блокировкой, первое окно все еще сфокусировано, и я должен щелкнуть по вновь отображаемому окну, прежде чем я смогу использовать какие-либо элементы управления, размещенные на нем.
Я пытался:
- установите свойство ShowActivated
- вызываю Activate () после Show()
- новая форма.диспетчер.checkAccess(), чтобы
определить, какой поток вызывает Show()
метод - проверьте newform.Свойство isActive после show (значение = true)
Не могли бы вы сказать мне, как исправить, пожалуйста? Спасибо.
Ответ №1:
Что ж, чтобы устранить проблему фокусировки первого окна, а не вновь отображаемого окна, вам нужно выполнить следующее после вызова метода show для нового окна:
Mouse.Capture(null);
Надеюсь, проблема будет решена.
Комментарии:
1. Спасибо за совет, Хасан, но, к сожалению, это не помогло = (Похоже, проблема вызвана каким-то специфическим поведением DXGrid.
2. @garek если это чисто проблема DevExpress, вы могли бы опубликовать это на их форуме. Вы получите более подходящий совет.