Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- procedure MustExecInMainThread(out Result: ISuperObject); // Sorry, the parameter cannot be changed
- var
- SwitchThread: Boolean;
- begin
- SwitchThread := Windows.GetCurrentThreadId <> MainThreadID;
- if SwitchThread then
- EnterMainThread;
- try
- ExecAndReturnResultsAsOutParam(Result);
- finally
- if SwitchThread then
- LeaveMainThread;
- end;
- end;
- procedure MustExecInMainThread(out Result: ISuperObject);
- var
- ResultTemp: ISuperObject;
- begin
- TAsyncCalls.VCLSync(procedure
- begin
- ExecAndReturnResultsAsOutParam(ResultTemp);
- end);
- Result := ResultTemp;
- end;
- procedure MustExecInMainThread(out Result: ISuperObject); // Sorry, the parameter cannot be changed
- var
- SwitchThread: Boolean;
- ResultTemp: ISuperObject;
- begin
- SwitchThread := Windows.GetCurrentThreadId <> MainThreadID;
- if SwitchThread then begin
- TThread.Synchronize(nil,
- procedure
- begin
- ExecAndReturnResultsAsOutParam(ResultTemp);
- end
- )
- Result := ResultTemp;
- end
- else
- ExecAndReturnResultsAsOutParam(Result);
- end;
- TAsyncCalls.VCLInvoke(
- procedure
- begin
- DoVCLStuffHere
- end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement