【发布时间】:2012-04-02 08:00:32
【问题描述】:
我有一个 InfoPath 表单,我需要有条件地禁用它的 OnChange 事件。由于在表单加载后无法绑定事件处理程序,我不得不依赖一个全局计数器来指示是否应该执行 OnChange 事件。 在每个 OnChange 事件中,我在执行任何操作之前检查是否 SuppressEventsCount == 0。 为了在某个函数或另一个函数的执行过程中抑制事件,我只需设置 SuppressEventsCount++,并在函数退出时再次设置 -- 。这样做的最大问题是它不是异常安全的。所以我有一个好主意,将 SuppressEvents 计数器包装在一个实现 iDisposable 的类中
using(SuppressEvents s = new SuppressEvents()){
// OnChange events fired here are ignored
} // OnChange events enabled again
这是可行的,但它仍然不如完全不需要使用“using”指令的 c++ 解决方案理想。
有没有办法:
- 在对象超出范围时触发析构函数或某些函数,或者
- 完全防止在“使用”指令之外初始化 SuppressEvents 对象
【问题讨论】:
-
查看这个问题:stackoverflow.com/q/2101524/6345(使用 IDisposable 和“使用”作为获取“范围行为”以实现异常安全的手段是否滥用?)