A.Event1 := nil;
A.Event2 := nil;
try
...
finally
A.Event1 := MyEvent1;
A.Event2 := MyEvent2;
end;
Run Code Online (Sandbox Code Playgroud)
可能出现问题吗?
编辑:
我已经接受了巴里的答案,因为它完全回答了我的问题,但根据情景,韦加的答案也是正确的,遗憾的是我不能同时接受.
这听起来像我以前见过的事件 - 噩梦:-)
我通常设置一个我在事件中检查的标志,而不是删除事件.我经常使用整数而不是布尔值,以便在一次处理中可以多次设置相同的标志.
像这样的东西:
procedure TMyObject.Traverse;
begin
inc(FTraverseFlag);
try
...
finally
dec(FTracerseFlag);
end;
end;
procedure TMyObject.OnBefore( ... );
begin
if FTraverseFlag > 0 then
exit;
...
end;
Run Code Online (Sandbox Code Playgroud)
我想这可以很容易地解决Barrys问题.