Рекомендации к работе с событиями
Важно иметь в виду, что события только предоставляют информацию о действиях, происходящих в 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 события не обрабатываются и не происходят;