Du machst dir einfach das Leben zu schwer ...
Delphi-Quellcode:
procedure TFoo.BarActionUpdate(Sender:Tobject);
begin
TAction(Sender).Enabled =
not FBarRunning;
end;
procedure TFoo.BarActionExecute(Sender:TAction);
begin
BarRunning := True;
FService.DoBar(
procedure (AResult:TBar; AException:
Exception)
begin
// ...
BarRunning := False;
end );
end;
Das
OnUpdate
wird immer wieder ausgelöst und hat als Hauptaufgabe, den Status einer Action zu setzen. Also genau das, was du brauchst.
Im
OnUpdate
sollst du
NICHT irgendeine Aktion ausführen, sondern
NUR den Status einer Action setzen.
Wenn du dich jetzt auf einige Flags einigen kannst, dann sieht so eine
OnUpdate
Methode z.B. auch so aus:
Delphi-Quellcode:
procedure TFoo.SomeAction(Sender:TObject);
begin
TAction(Sender).Enabled := ( not BarRunning and FooRunning ) or FooBarRunning;
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)