Можете ли вы сказать, что вызывает вашу задержку?
Если в вашем событии Click
есть что-то медленное, вы можете использовать отдельный Thread
для выполнения кода. В новом потоке, если у вас есть код, который должен быть выполнен в потоке пользовательского интерфейса, используйте Dispatcher.BeginInvoke
, чтобы поставить его в очередь для выполнения, когда у пользовательского интерфейса есть время обработки. Чтобы пользовательский интерфейс оставался отзывчивым, вам нужно держать тяжелый код вне основного (UI) потока.
Если ваша виртуальная клавиатура является локальной для определенного Window
, в зависимости от сложности того, что вы делаете, вы можете использовать подход, который я использовал в прошлом, когда вы просто вручную вводите символы клавиатуры в TextBox
, который имеет фокус.
Отказ от ответственности: я написал этот код более двух лет назад и в результате ненавижу его. Хотя обычно я притворяюсь, что его не существует, это может вам помочь. С тех пор я улучшил его, но сама концепция не имела проблем с производительностью на более медленных машинах. Я бы процитировал блог Джеффа Этвуда о том, что код, который вы больше всего ненавидите, является вашим собственным, но...
Редактировать. Поскольку у вас все еще есть проблемы даже с пустым Click
, вы можете рассмотреть другие потенциальные задержки. Максимально ли загружен ЦП пользователя на 100% от чего-то? Либо слишком тяжелые анимации, либо другое потенциальное событие? Большинство задержек пользовательского интерфейса обычно являются результатом либо максимальной загрузки ЦП, либо события, занимающего слишком много времени в потоке пользовательского интерфейса.
Одна из возможностей заключается в том, что если ваш Window
имеет AllowsTransparency="True"
, большая часть рабочей нагрузки, которая обычно приходится на графическую карту, теперь будет отображаться в программном обеспечении и может иметь серьезные потери производительности. Кроме того, вы можете взглянуть на этот Microsoft статью об оптимизации производительности приложений WPF с некоторыми общими советами, которые могут ускорить ваша обработка.
Я бы посоветовал всем, кто разрабатывает XAML, прочитать эту последнюю статью. Разница в производительности между такими небольшими деталями, как использование TextBlock
против Label
или реализация DependencyProperty
против INotifyPropertyChanged
, действительно может складываться, и тот факт, что они проводят бенчмаркинг для каждой из них, действительно показывает важность правильного дизайна.
person
Will Eddins
schedule
11.12.2009