2012-02-29 3 views
3

Есть ли какие-либо опасности при использовании Application.UseWaitCursor, чтобы отключить и на указателе мыши песочных часов?Должен ли использоваться Application.UseWaitCursor?

+0

См. Http://stackoverflow.com/questions/302663/cursor-current-vs-this-cursor-in-net-c/302865#302865 –

+0

Каков ваш ответ на беспокойство, поднятое в комментарии ниже вашего ответа на этот вопрос? – CJ7

+0

Я не вижу проблемы, кто-то просто использовал класс из неправильной темы. Более типичное использование курсора ожидания - это когда вы * не используете * поток. –

ответ

6

«Опасность» не восстанавливает курсор.

Вы можете сделать это с помощью try…finally блоков, чтобы гарантировать, что даже если исключение вы восстановить курсор, или убирать с синтаксисом немного, окружив эту функциональность в классе, который реализует IDisposable, так что вы можете использовать using блоки вместо ,

public class WaitCursor : IDisposable 
    { 
    public WaitCursor() 
    { 
     Application.UseWaitCursor = true; 
    } 

    public void Dispose() 
    { 
     Application.UseWaitCursor = false; 
    } 
    } 

Использование:

using (new WaitCursor()) 
    { 

    // do stuff - busy, busy, busy 

    } // here the cursor will be restored no matter what happened 
2

Если приложение будет заблокировано до тех пор, длительная эксплуатация работает не будет завершена, будет правильно использовать Application.UseWaitCursor. Но если у вас есть несколько форм, в которых будет заблокирована только одна форма, лучше установить свойство Cursor явно в форме.

Вы также должны помнить, что положить Application.UseWaitCursor = false; в блок finally, поэтому вы убедитесь, что курсор сброшен в случаях, когда выбрано исключение приложения.

+0

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

+0

Да, это правильно, но только для активированных элементов управления. Если у вас длительный процесс, который блокирует форму, вам также необходимо отключить возможность ввода данных. Например. поместите все элементы управления в панель, которую вы можете отключить (Enable = false;) во время обработки. –