14

WinForm の UI を使用した私のプログラムでは。ThreadPool でメソッドを起動する直前に、カーソルを砂時計に設定します。

カーソルを設定するための UI スレッドの私のコードは次のようになります。

Application.UseWaitCursor = true;

メソッドが終了したら、UI スレッドに戻ってカーソルを通常のケースに設定します。

Application.UseWaitCursor = false;

私の問題は、マウスを動かさない限り、カーソルが砂時計にとどまることです。ユーザーがマウスを動かさずにアクションの最後を待つと、少し邪魔になります。

誰でも私を助けることができますか?

ジェローム

4

5 に答える 5

17

実は、この問題を何時間も調査した結果、どこかで見つけたもう 1 つの方法があります。

残念ながら、それはハックです。

以下は、問題を処理するために私が書いた方法です。

/// <summary>
    /// Call to toggle between the current cursor and the wait cursor
    /// </summary>
    /// <param name="control">The calling control.</param>
    /// <param name="toggleWaitCursorOn">True for wait cursor, false for default.</param>
    public static void UseWaitCursor(this Control control, bool toggleWaitCursorOn)
    {
        ...

        control.UseWaitCursor = toggleWaitCursorOn;

        // Because of a weird quirk in .NET, just setting UseWaitCursor to false does not work
        // until the cursor's position changes. The following line of code fakes that and 
        // effectively forces the cursor to switch back  from the wait cursor to default.
        if (!toggleWaitCursorOn)
            Cursor.Position = Cursor.Position;
    }
于 2011-01-05T22:37:56.090 に答える
11

もう1つの方法:

Cursor.Current = Cursors.WaitCursor;

終了したら、カーソルを元に戻します。

Cursor.Current = Cursors.Default;
于 2010-06-28T09:45:48.203 に答える
7

この動作を再現できませんか? それは私にとってはうまくいきます。

Control.Cursor = Cursors.WaitCursorただし、このアプローチを使用する場合に注意すべきことの 1 つは、通常は次のように使用されることです。

this.Cursor = Cursors.WaitCursor

ただし、これは正常に機能しているように見えますがthis、フォームを参照しているため、ユーザーがマウスを別のコントロール (TextBox など) に移動すると、マウスは待機カーソルを表示しません。

これにより、ユーザーが混乱する可能性があります。または、アプリケーションが他の作業で忙しいときにユーザーが他の作業を続けると、問題が発生する可能性があります。

于 2010-06-28T07:35:35.427 に答える
0

カーソルを手動で設定します。それが私がすることです。

于 2010-06-28T07:20:32.930 に答える