Pergunta

Não sei se esse é um problema geral de serviços da Web ou apenas meu cenário específico, que é um aplicativo WPF com um Dispatchertimer chamando um método de serviço da Web. Sempre que o temporizador é chamado, o cursor do mouse muda automaticamente para um cursor de ampulheta.

O processamento da chamada é muito curto e acontece a cada 3 segundos; portanto, a experiência do usuário é que a cada 3 segundos os filckers do mouse como uma ampulheta por uma fração de segundo e depois remontam à representação normal do cursor.

Como posso evitar esse inconveniente?

Obrigado.

Foi útil?

Solução

Seu aplicativo inteiro não responde sempre que o timer também dispara, ou todo o processo é rápido demais para perceber?

Minha suposição é que você pode estar invocando o código de maneira síncrona no seu Dispatchertimer, o que pode causar breves momentos de falta de resposta (e talvez a ampulheta). Para contornar isso, verifique se o evento de carrapato do seu despachante é o código assíncrono.

Aqui está um pequeno exemplo simples que, a cada 3 segundos, realiza um segundo trabalho falso e depois atualiza a GUI:

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();
    }
}

(Existem outros métodos para atingir os mesmos objetivos, este foi simples de reclamar. Veja a orientação aqui para muito mais informações: http://msdn.microsoft.com/en-us/magazine/cc163328.aspx)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top