Evite cursor do mouse de ampulheta ao chamar de um serviço na Web?
-
25-09-2019 - |
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.
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)