我不知道如何在Delphi中正确使用TTask。
我创建了一个TTask。
syncTask := ttask.Create(SyncMysqlDatabase);
以下代码位于onlocationchangeevent(位置传感器)中。 每当onlocationchangeevent触发运行此代码时:
if (syncTask.Status <> ttaskstatus.Running) then
begin
logi('syncTask.Start');
syncTask.Start;
end;
但是当我再次尝试重新启动(完成后)任务后,我得到以下异常:
是的,有人可以帮帮我吗?为什么呢?无法启动已完成的任务
答案 0 :(得分:2)
您需要创建一个ITask变量并将其分配给它。
然后,您可以等待任务完成,然后再次实例化
像这样:private
aTask: TTask;
...
Procedure LocationChanged;
begin
if Assigned(aTask) then
begin
while not TTask.WaitForAll([aTask], 10000) do
break;
end;
aTask := TTask.Run(procedure()
begin
// Do Your Stuff
end);
end;
我不确定我的Assigned(aTask)代码是否可行,但基本上只是检查aTask是否分配了任务
因为看起来你正在做一个Android服务,所以我猜测你并没有太多挂机&#34;挂着&#34;主线程 - 这段代码片段会这样做
答案 1 :(得分:1)
错误不言自明:
无法启动已完成的任务 。
TTask
只能启动一次。完成后,您必须将其释放并创建一个新的TTask
。