0

ビジー カーソルの表示に関する多くのリソースがあるようです。

しかし、私が見つけたすべての解決策は、ビューモデルを介してカーソルを設定することに依存しています。(つまり、IsBusy プロパティ、使い捨ての WaitCursor)。

これらのメソッドは、データ バインディング/ビュー モデルが長時間実行される時期がわかっている場合にうまく機能します。

しかし、ボトルネックが実際の WPF ユーザー コントロール自体である場合に、これを自動的に行う方法がわかりません。

例えば:

コントロールの読み込みは、最初はラグがありません。ただし、サード パーティ製のコントロールを使用すると、コントロールが読み込まれるたびに 500 ミリ秒の遅延が発生します。

バインディング自体は高速であるため、ビュー モデルに waitcursor/IsBusy を追加しても意味がありません。コントロール (またはその論理/ビジュアルの子) のレンダリングがいつ終了したかがわからないためです。ビューモデルはビューの実装の影響を受けるべきではないため、それも認識すべきではありません。

1 つ以上の WPF コントロールがビジー/遅いときに、アプリケーションが自動的にカーソルをビジーに設定することは可能ですか?

4

2 に答える 2

0

このようなものが必要になる場合があります。

            var busytimer = new DispatcherTimer(
            TimeSpan.FromSeconds(1),
            DispatcherPriority.Normal,
            delegate
            {
                Process application = null;
                foreach (var process in Process.GetProcesses())
                {
                    if (process.ProcessName == "Your process name")
                    {
                        application = process;
                        break;
                    }
                }

                if (!application.Responding)
                {
                    this.Cursor = Cursors.Wait;
                }
                else
                {
                    this.Cursor = Cursors.Arrow;
                }
            },
            Application.Current.Dispatcher);
于 2014-09-29T06:26:38.037 に答える
0

1 つ以上の WPF コントロールがビジー/遅いときに、アプリケーションが自動的にカーソルをビジーに設定することは可能ですか?

あまり。UI スレッドがブロックされている場合は、ブロックが解除されるまでカーソルを更新できず、目的に反します。

バインディング自体は高速であるため、ビュー モデルに waitcursor/IsBusy を追加しても意味がありません。コントロール (またはその論理/ビジュアルの子) のレンダリングがいつ終了したかがわからないためです。ビューモデルはビューの実装の影響を受けるべきではないため、それも認識すべきではありません。

IDisposable待機カーソル ソリューションを使用する場合は、次のレイアウト パスの後に呼び出しが発生するようにスケジュールしてみてくださいDispose()

Dispatcher.CurrentDispatcher.BeginInvoke(
    DispatcherPriority.Loaded,
    new Action(() => waitCursor.Dispose()));
于 2014-09-29T15:28:24.050 に答える