请问:窗体与子线程的同步有关问题

请教:窗体与子线程的同步问题
窗体Form1在ShowModal时启动一个定时器,让定时器在稍后创建一个子线程Thread1,该线程负责在后台处理数据。当Thread1处理完数据之后,会通知窗体Form1,让它从ShowModal死等状态中出来,使程序继续往后运行:
Synchronize(
    procedure
    begin
      Form1.ModalResult := mrOK;
    end
  );

现在的问题是,时不时会发生子线程Thread1给Form1发送mrOK消息之后,Form1仍然停留在ShowModal状态死等的情况,好像Form1没有收到消息的样子。查了一下相关资料,说是“Form1.ModalResult := mrOK;”相当于PostMessage,只负责把消息成功发送出去就马上返回,不管对方有没有接收到。

如何解决这个问题?感觉现在采用的同步机制很不可靠。
或者有其他更好的方法可以使用?

------解决方案--------------------
弄一个公共变量,子线程修改,Form检查后再执行之后代码。
------解决方案--------------------
定义一个变量,线程来更新,然后用一个计时器定时来取这个变量值