明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1669|回复: 1

求助于各位版主——关于反应器的

[复制链接]
发表于 2003-10-10 16:02:00 | 显示全部楼层 |阅读模式
各位版主,能谈谈反应器的使用经验和技巧吗?急需解决,谢谢!
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2003-10-10 17:23:00 | 显示全部楼层
反应器使用规则

由于将来可能修改反应器的内部实现机制,使用反应器时请尽量遵守下述规则,如果不遵守这些规则,可能会导致应用程序出现不可预料的结果。

不要依赖于反应器通报的顺序。

除了少数特例之外,建议您不要依赖于反应器通报的顺序。例如,OPEN 命令将触发 BeginCommand、
BeginOpen、EndOpen 和 EndCommand 事件。然而,它们发出的顺序可能不是这样的。您可以安全地依赖的顺序只有 Begin 事件是在相应 End 事件之前发生。例如 commandWillStart() 总是在 commandEnded() 之前发生,而 beginInsert() 总是在 endInsert() 之前发生。因为将来可能引入新的事件通报,可能会重新排列现有通报顺序,所以依赖于更复杂的顺序,可能会给您的应用程序带来问题。

不要依赖于通报间函数调用的顺序。

在通报之间函数调用的顺序也是不能保证的。例如,当收到对象 A 的通报 :vlr-erased 时,它仅表示对象 A
被删除,如果在收到对象 A 的通报 :vlr-erased 之后收到了对象 B 的通报 :vlr-erased,这只是表示对象 A 和 B
都已被删除。它并不能保证 B 是在 A 后面被删除。如果应用程序依赖于这个层次的关系,那应用程序在后续版本的 AutoCAD 中很可能会崩溃。所以不要依赖于这些顺序,而应该依赖于用反应器来指示系统状态。

不要在反应器回调函数中使用任何需要和用户交互的函数(如 getPoint、entsel 等)。

在反应器回调函数中试图执行交互函数会导致严重问题,因为在事件发生时,AutoCAD 可能仍在处理某命令。所以要避免使用要求用户输入的函数,如 getPoint、entsel 和 getkword 等,也不要使用选择集操作函数和 command 函数。

在事件处理函数中不要加载对话框。

对话框和用户交互函数一样,也会影响 AutoCAD 的当前操作。然而,消息对话框和警告对话框可认为是非交互的,所以可以使用它们。

不要更新发出事件通报的对象。

引起对象触发回调函数的事件可能仍在处理之中,当调用回调函数时 AutoCAD 可能仍在使用该对象。所以,在回调函数中不要试图更新该对象。然而,您可以安全地从触发事件的对象中读取信息。例如,假设有一块用砖填充的地板,而且将反应器附着到地板边界上。如果修改地板的尺寸,反应器回调函数将自动添加或删除砖以填充新的地板面积。该函数将能获取边界的新面积,但它不能去修改边界本身。

不要在回调函数中执行能触发相同事件的操作。

如果在反应器回调函数中执行的某操作触发了同样事件,将陷入无限循环。例如,如果在 BeginOpen 事件的回调函数中试图打开一个图形,AutoCAD 将持续打开更多的图形,直到打开的图形数目达到上限,无法再打开图形为止。

在设置反应器以前要确认当前没有设置该反应器,否则可能在发生同一事件时调用多个回调函数。
        记住当 AutoCAD 显示模式对话框时,不会发生任何事件。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-10-2 14:37 , Processed in 0.185967 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表