Web サービスを呼び出すときに砂時計マウス カーソルを使用しないようにしますか?

StackOverflow https://stackoverflow.com/questions/3005346

質問

これが一般的な 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)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top