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

标签 delphi

A.Event1 := nil;
A.Event2 := nil;
try
  ...
finally
  A.Event1 := MyEvent1;
  A.Event2 := MyEvent2;
end;

会不会出什么问题?

编辑:

我接受了 Barry 的回答,因为它完全回答了我的问题,但根据具体情况,Vegar 的回答也是正确的,遗憾的是我不能同时接受。

最佳答案

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

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

类似这样的事情:

procedure TMyObject.Traverse;
begin
  inc(FTraverseFlag);
  try
    ...
  finally
    dec(FTracerseFlag);
  end;
end;

procedure TMyObject.OnBefore( ... );
begin
  if FTraverseFlag > 0 then 
    exit;
  ...
end;

我想这可以很容易地实现线程安全,以解决 Barrys 的担忧。

关于delphi - 以这种方式删除和重新分配事件安全吗?如果没有,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/323556/

相关文章:

python - 在 Delphi 中使用 MessagePack 序列化用户定义类型时可能出现编码问题?

delphi - 从验证后退出的类继承方法的最佳方法是什么?

mysql - 概率。使用 tquery.requeSTLive

c# - 奇数 : @myRecordArray[0] returns invalid pointer if array size is bigger than 4136

delphi - Delphi的基本代码

delphi - 发生错误时在Delphi按钮组件中检测MouseUp

delphi - 单击关闭按钮时如何通知控制台窗口程序?

delphi - 如何避免在Delphi中使用插入命名空间

delphi - 交换了(左、上)和(右、下)点的 TRect 是什么意思?

delphi - 如何添加设置并进行设置,然后将其内置到Delphi中的现有exe文件中