9.2. Рекомендации относительно обработчиков событий

Источник здесь. [перевод не проверен] ;[Переводчик: Богданов Михаил]

    Важно помнит, что события просто предоставляют информацию о состоянии и действиях, проводимых в AutoCAD. Хотя обработчики для событий могут быть написаны. AutoCAD может быть в середине операции, когда обработчик событий будет вызван. По этому обработчики событий имеют некоторые ограничения на свои действия, если они хотят обеспечить безопасность операции в сочетании с AutoCAD и его базой данных.
  • Не полагайтесь на последовательность событий. 
    При написании обработчиков событий, последовательность событий произойдет не обязательно в том порядке, в котором вы думаете. Например, если вы запустите команду OPEN, то произойдут события CommandWillStart, DocumentCreateStarted, DocumentCreated и CommandEnded. Тем не менее, они не будут каждый раз происходить в точно таком порядке. Единственное на что вы можете рассчитывать – на то, что большинство событий происходят парами, начало и конец события.
  • Не полагайтесь на последовательность операций. 
    Если вы удалите объект1, а затем объект2, не полагайтесь на то, что вы получите событие ObjectErased для объекта1, а затем для объекта2. Вы можете получить событие ObjectErased для объекта2 первым.
  • Не пытайтесь запускать любые интерактивные функции из обработчика событий. 
    Попытка выполнить интерактивные функции внутри обработчика событий может привести к серьезным проблемам, т.к. AutoCAD еще не закончил обработку команды в момент события. Таким образом, вы всегда должны избегать запросов для ввода в командной строке, запросов выбора объектов, а также не пользоваться методом SendStringToExecute внутри обработчиков событий.
  • Не запускайте диалоговых окон внутри обработчика событий. 
    Диалоги считаются интерактивной функцией и могу вмешиваться в текущую работу AutoCAD. Сообщения(Message boxes), и предупреждения(alert boxes) не являются интерактивными и могут быть выданы безопасно. Но вывод окна сообщений (Message box) в некоторых обработчиках событий, таких как EnterModal, LeaveModal, DocumentActivated и DocumentToBeDeactivated может привести к неожиданным последствиям.
  • Вы можете записать данные любого объекта в базу данных, но избегайте изменять объект, который вызвал событие. 
    Очевидно, что любой объект вызвавший событие, может быть в настоящее время еще открыт и над ним может происходить какое либо действие. По этому избегайте изменений этого объекта из обработчика событий. Тем не менее вы смело можете считать информацию из объекта, который запустил событие.
  • Не выполняйте ни каких действий внутри обработчика событий, которые могут вызвать тоже самое событие. 
    Если вы выполните действия внутри обработчика события, которые вызовут тоже событие, вы такие образом создадите бесконечный цикл. Например, вы никогда не должны пытаться открыть объект в событии ObjectOpenedForModify иначе AutoCAD будет просто продолжать открывать объекты.
  • События не происходят пока AutoCAD отображает модальное окно
Comments