我必须使用遗留代码。该代码在主线程中创建了一个TTimer
。
在OnTimer
事件中,计时器会定期检查工作线程中某些数据的状态。
伪代码:
procedure MainForm.OnTimer(Sender: TObject);
begin
if WorkerThread.Data.State = full then
begin
WorkerThread.Free; //This freezes GUI.
end else
//Do something else.
end;
问题是当
WorkerThread
终止时,我想做一些后台操作。为了避免同步,我重写了DoTerminate
方法。但是,在这种特殊情况下,这无济于事,并且在DoTerminate
完成之前,我的GUI被冻结。我能以某种方式避免冻结吗?
谢谢。
最佳答案
这里没有足够的代码来确定任何内容。但是,在线程上调用Free
会导致对Terminate
的调用,然后是WaitFor
的调用。很可能没有等待返回,这与冻结的UI一致。
关于multithreading - TTimer.OnTimer是否会使工作线程与主线程同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8654111/