以这种方式删除和重新分配事件是否安全?如果没有,为什么?

Fab*_*mes 4 delphi

A.Event1 := nil;
A.Event2 := nil;
try
  ...
finally
  A.Event1 := MyEvent1;
  A.Event2 := MyEvent2;
end;
Run Code Online (Sandbox Code Playgroud)

可能出现问题吗?

编辑:

我已经接受了巴里的答案,因为它完全回答了我的问题,但根据情景,韦加的答案也是正确的,遗憾的是我不能同时接受.

Veg*_*gar 6

这听起来像我以前见过的事件 - 噩梦:-)

我通常设置一个我在事件中检查的标志,而不是删除事件.我经常使用整数而不是布尔值,以便在一次处理中可以多次设置相同的标志.

像这样的东西:

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问题.