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/