TTphi in Delphi 10.2

时间:2018-01-12 16:12:20

标签: multithreading delphi

以前没有使用TTask,这是我想做的一件简单的事情。

虽然主窗体执行一个过程(DoAnalyse)id,就像在我的主窗体上显示TActivityIndi​​cator而不会因为线程完成工作而减慢速度。我以前使用进度条但更喜欢使用更现代的活动指标。

我尝试过两种方式:

简单:

Ttask.Run(DoAnalyse);

任务:= TTask.Create(程序     开始         DoAnalyse;     结束); Task.Start;

它完美执行,我的活动指标表现得很顺畅。

问题是当程序完成后,主表单被锁定并且根本没有响应。我猜我必须把一些回调放回主线程,但不知道该怎么做。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

TTask在停止运行时没有事件。您的任务过程需要使用TThread.Synchronize()TThread.Queue()(或您选择的任何其他线程间机制)在主线程退出之前通知它。

否则,请使用TThread代替TTaskTThread有一个OnTerminate事件。