Pregunta

Para mi aplicación WPF he desarrollado un teclado virtual.Funciona muy bien en mi máquina de desarrollo.Sin embargo, en máquinas más lentas haga clic en el botón de respuesta es lento.Después de hacer clic en el botón, hay un retraso antes de que la pantalla se actualiza con el botón de estado y los botones de evento.¿Qué puedo hacer para quitar este retraso?Es el problema de WPF problema de pantalla?

Pensando que era el controlador de eventos que era lento, he probado varios métodos para enviar un evento de pulsación de tecla del teclado.No importa lo que yo he probado, la interacción es aún lento.Actualmente estoy usando:

SendInput(uint nInputs, ref INPUT pInputs, int cbSize);

Importados de user32.dll.Mi controlador de eventos se ha simplificado hasta el punto de que es sólo la creación de los parámetros y llamar a la función anterior.

También he probado a utilizar el siguiente, pero no tenía nada mejor rendimiento:

 System.Windows.Input.Keyboard.FocusedElement.RaiseEvent(...)

¿Cómo puedo deshacerme de la demora?

¿Fue útil?

Solución

Se puede saber cuál es la causa de su retraso?

Si hay algo lento en su Click caso, puede que desee utilizar un independiente Thread para ejecutar el código.En el nuevo hilo, si tienes el código que debe ejecutarse en el Subproceso de interfaz de usuario, el uso de Dispatcher.BeginInvoke a la cola hasta que se ejecuta cuando la interfaz de usuario tiene tiempo de procesamiento.Para mantener la interfaz de usuario sensible, que necesita para mantener un código de la principal (interfaz de usuario) de hilo.

Si su teclado virtual es local a una cierta Window, dependiendo de la complejidad de lo que usted está haciendo, usted puede tomar un método que he utilizado en el pasado donde usted sólo tiene que rellenar manualmente los caracteres del teclado en la TextBox que tiene el foco.

Descargo de responsabilidad: Escribí que el código hace más de 2 años y el odio como un resultado.Mientras yo normalmente fingir que no existe, puede ayudarte.He hecho mejor desde entonces, pero el concepto en sí no tenía problemas de rendimiento en máquinas más lentas.Me gustaría citar a Jeff Atwood blog sobre el código que más odio es su propia, pero, bueno...

Editar: Puesto que usted todavía tiene problemas incluso con Click vacío, es posible que desee mirar a otros posibles hold-ups.Es el usuario de la CPU al máximo al 100% de algo?Demasiado pesado animaciones, o otra evento potencial?La mayoría de la interfaz de usuario de los retrasos suelen ser resultado de un máximo de CPU o un evento tomando demasiado tiempo en la interfaz de usuario del hilo.

Una posibilidad es la de si su Window ha AllowsTransparency="True", gran parte de la carga de trabajo que normalmente irían a la tarjeta de gráficos ahora va a ser prestados en el software, y puede tener graves penalizaciones de rendimiento. Más allá de eso, usted puede tomar un vistazo a este artículo de Microsoft en Optimizar el Rendimiento de las Aplicaciones de WPF para algunos consejos generales que podrían acelerar su procesamiento.

Yo sugeriría a nadie desarrollar en XAML leer ese último artículo.La diferencia en el rendimiento entre estos pequeños detalles, tales como el uso de TextBlock vs Label, o la aplicación de DependencyProperty's vs INotifyPropertyChanged, que realmente pueden sumar, y el hecho de que benchmarking en contra de cada uno de los que realmente muestra la importancia de un adecuado diseño.

Otros consejos

Sólo corrió a través de esta discusión. Tengo una aplicación Windows Forms donde la respuesta fue lenta botón. Esto sucedió después de actualizar a Windows de 64 bits 7. He descubierto que si he cambiado de objetivo del proyecto de "x 86" (en lugar de "Cualquier CPU"), la respuesta botón lenta fue.

Si su controlador de eventos tarda mucho tiempo para terminar, se bloqueará la interfaz de usuario para ese momento. Prueba esto controlador de eventos:

  private void button1_Click(object sender, RoutedEventArgs e)
  {
     System.Threading.Thread.Sleep(5000);
  }

Su controlador de eventos probablemente sólo termina más rápido en una máquina más rápida. Para las operaciones lentas, es posible que desee para empujar el trabajo a otro hilo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top