Рекомендации к работе с событиями

Важно иметь в виду, что события только предоставляют информацию о действиях, происходящих в AutoCAD. Во время срабатывания некоторых событий AutoCAD может находиться в процессе выполнения операции, поэтому обработчики событий имеют некоторые ограничения, чтобы обеспечить стабильную работу с приложением и его данными в чертеже. Ниже перечислены эти ограничения и особенности:

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