请务必记住,事件仅提供有关AutoCAD中发生的状态或活动的信息。尽管可以编写事件处理程序来响应这些事件,但在触发事件处理程序时,AutoCAD 可能正在操作中。因此,如果事件处理程序要与 AutoCAD 及其数据库一起提供安全操作,则它们对可以执行的操作有一些限制。
- 不要依赖事件的顺序。
编写事件处理程序时,不要依赖于事件的顺序,以您认为发生的确切顺序发生。例如,如果发出 OPEN 命令,则事件 CommandWillStart、DocumentCreateStarted、DocumentTCreated 和 CommandEnd 都将被触发。但是,它们可能不会每次都以确切的顺序出现。您唯一可以依赖的是,大多数事件成对发生,开始和结束事件。
- 不要依赖操作顺序。
如果先删除对象 1,然后删除对象 2,请不要依赖于将收到对象 1 和对象 2 的 ObjectErased 事件这一事实。您可能会首先收到 object2 的 ObjectErased 事件。
- 不要尝试从事件处理程序执行任何交互式函数。
尝试从事件处理程序中执行交互式函数可能会导致严重问题,因为在触发事件时 AutoCAD 可能仍在处理命令。因此,应始终避免在命令提示符下请求输入,以及对象选择请求,以及从事件处理程序中使用 SendStringToExecute 方法。
- 不要从事件处理程序中启动对话框。
对话框被视为交互功能,可能会干扰 AutoCAD 的当前操作。消息框和警报框不被视为交互式,可以安全地发出;但是,在某些事件处理程序(如 EnterModal、LeaveModal、DocumentActivated 和 DocumentToBeDeactivated )中发出消息框可能会导致意外的排序。
- 可以将数据写入数据库中的任何对象,但应避免修改发出事件的对象。
显然,导致触发事件的任何对象仍可能处于打开状态,并且操作当前正在进行中。因此,请避免从同一对象的事件处理程序修改对象。但是,您可以安全地从触发事件的对象读取信息。
- 不要从事件处理程序执行可能触发同一事件的任何操作。
如果在触发同一事件的事件处理程序中执行相同的操作,则将创建无限循环。例如,切勿尝试从 ObjectOpenedForModify 事件中打开对象,否则 AutoCAD 只会继续打开对象。
- AutoCAD 显示模式对话框时不会触发任何事件。
|