Pregunta

No sé si esto es un problema de servicios web en general o sólo mi escenario específico, que es una aplicación de WPF con una DispatcherTimer llamar a un método de servicios web. Cada vez que el temporizador se llama, el cursor del ratón cambia automáticamente a un cursor de reloj de arena.

El procesamiento de la llamada es muy corta y ocurre cada 3 segundos, por lo que la experiencia del usuario es que cada 3 segundos los filckers ratón como un reloj de arena para una fracción de segundo y luego vuelve a la representación normal de cursor.

¿Cómo puedo evitar este inconveniente?

Gracias.

¿Fue útil?

Solución

Se muestra toda su aplicación va responde siempre se activa el temporizador así, o es todo el proceso demasiado rápido para notificación?

Mi suposición es que es posible que se invoca el código de forma sincrónica en su DispatcherTimer, lo que podría causar breves momentos de falta de respuesta (y tal vez el reloj de arena). Para evitar esto, asegúrese de que el evento Tick de Dispatcher es asíncrono código.

Aquí está un ejemplo sencillo que poco, cada 3 segundos, realiza un segundo de trabajo falsa, y luego actualiza la interfaz gráfica de usuario:

public partial class MainWindow : Window
{
    private static int foo = 0;

    public MainWindow()
    {
        InitializeComponent();

        DispatcherTimer timer = new DispatcherTimer();
        timer.Interval = TimeSpan.FromMilliseconds(3000);
        timer.Tick += new EventHandler(delegate(object o, EventArgs args)
        {
            StatusBox.Text = "Incrementing";

            ThreadStart start = delegate()
            {
                // Simulate work
                Thread.Sleep(1000);

                // Update gui
                this.Dispatcher.BeginInvoke(new Action(delegate
                {
                    CountingBox.Text = (foo++).ToString();
                    StatusBox.Text = "Waiting";
                }));
            };

            new Thread(start).Start();                
        });

        timer.Start();
    }
}

(Hay otros métodos para lograr los mismos objetivos, éste era fácil de recitar Ver la guía aquí para obtener mucha más información:. http://msdn.microsoft.com/en-us/magazine/cc163328.aspx )

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