Web サービスを呼び出すときに砂時計マウス カーソルを使用しないようにしますか?
-
25-09-2019 - |
質問
これが一般的な Web サービスの問題なのか、それとも Web サービス メソッドを呼び出す DispatcherTimer を備えた WPF アプリケーションという私の特定のシナリオだけなのかはわかりません。タイマーが呼び出されるたびに、マウス カーソルが自動的に砂時計カーソルに変わります。
呼び出しの処理は非常に短く、3 秒ごとに発生するため、ユーザー エクスペリエンスでは、3 秒ごとにマウスが一瞬砂時計のように動き、その後通常のカーソル表示に戻ります。
この不便を回避するにはどうすればよいでしょうか?
ありがとう。
解決
タイマーが作動するたびにアプリ全体が応答しなくなりますか、それともプロセス全体が速すぎて気付かないのでしょうか?
私の推測では、DispatcherTimer でコードを同期的に呼び出している可能性があり、これにより、一瞬応答しなくなる可能性があります (おそらく砂時計も発生します)。これを回避するには、Dispatcher の Tick イベントが非同期コードであることを確認します。
以下は、3 秒ごとに 1 秒間の偽の作業を実行して 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();
}
}
(同じ目的を達成する方法は他にもありますが、これは簡単に実行できました。詳細については、こちらのガイダンスを参照してください。 http://msdn.microsoft.com/en-us/magazine/cc163328.aspx)
所属していません StackOverflow