Вопрос

В моей программе с UI в WinForm. Я установил курсор на песочные часы, прежде чем запустить метод в ThreadPool.

Мой код в потоке пользовательского интерфейса для установки курсора выглядит так:

Application.UseWaitCursor = true;

Когда метод закончен, я возвращаюсь к потоке пользовательского интерфейса для установки курсора в нормальный случай.

Application.UseWaitCursor = false;

Моя проблема - курсор остается в часовых часах, пока не двигаю мышь. Это немного беспокоит, если пользователь ждет до конца действия, не перемещая мышь.

Кто-нибудь может мне помочь?

Jérome.

Это было полезно?

Решение

Я не могу воспроизвести это поведение? Он отлично работает для меня.

Одна вещь, чтобы заметить, хотя, если вы используете Control.Cursor = Cursors.WaitCursor Подход в том, что он обычно используется так:

this.Cursor = Cursors.WaitCursor

Который бы выглядел нормально, однако, однако, this Относится к форме, поэтому, если пользователь перемещает мышь на другой элемент управления, например, текстовое поле, то мышь не показывает курсор ожидания.

Это может вызвать путаницу для пользователей. Или может привести к некоторым вопросам, если пользователь продолжает работать над чем-то еще, когда приложение занято, делая другую работу.

Другие советы

На самом деле, есть еще один способ сделать это, что я нашел где-то после работы по этой проблеме.

К сожалению, это хак.

Ниже приведен метод, который я писал, который обрабатывает проблему.

/// <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;
    }

Еще один способ:

Cursor.Current = Cursors.WaitCursor;

Когда закончите, просто измените курсор назад:

Cursor.Current = Cursors.Default;

Установите курсор вручную. Это то, чем я занимаюсь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top