Advertisement
Guest User

Untitled

a guest
Jun 19th, 2019
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.14 KB | None | 0 0
  1. procedure MustExecInMainThread(out Result: ISuperObject); // Sorry, the parameter cannot be changed
  2. var
  3. SwitchThread: Boolean;
  4. begin
  5. SwitchThread := Windows.GetCurrentThreadId <> MainThreadID;
  6. if SwitchThread then
  7. EnterMainThread;
  8. try
  9. ExecAndReturnResultsAsOutParam(Result);
  10. finally
  11. if SwitchThread then
  12. LeaveMainThread;
  13. end;
  14. end;
  15.  
  16. procedure MustExecInMainThread(out Result: ISuperObject);
  17. var
  18. ResultTemp: ISuperObject;
  19. begin
  20. TAsyncCalls.VCLSync(procedure
  21. begin
  22. ExecAndReturnResultsAsOutParam(ResultTemp);
  23. end);
  24. Result := ResultTemp;
  25. end;
  26.  
  27. procedure MustExecInMainThread(out Result: ISuperObject); // Sorry, the parameter cannot be changed
  28. var
  29. SwitchThread: Boolean;
  30. ResultTemp: ISuperObject;
  31. begin
  32. SwitchThread := Windows.GetCurrentThreadId <> MainThreadID;
  33. if SwitchThread then begin
  34. TThread.Synchronize(nil,
  35. procedure
  36. begin
  37. ExecAndReturnResultsAsOutParam(ResultTemp);
  38. end
  39. )
  40. Result := ResultTemp;
  41. end
  42. else
  43. ExecAndReturnResultsAsOutParam(Result);
  44. end;
  45.  
  46. TAsyncCalls.VCLInvoke(
  47. procedure
  48. begin
  49. DoVCLStuffHere
  50. end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement