type TAsyncCommand = class(TCommand) property ThreadSafeObject: TObject read GetThreadSafeObject write SetThreadSafeObject;
function TAsyncCommand GetThreadSafeObject: TObject; begin TMonitor.Enter(Self); try Result := fThreadSafeObject; finally TMonitor.Exit(Self); end; end;