我需要为TSgringGrid的每一行创建一个任务,该任务将从网页中获取内容,并更新单元格中的数据。
我尝试如下:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
I, nCount : Integer;
begin
I := 0;
nCount := 0;
for I := 1 to StringGrid.RowCount-1 do
begin
if StringGrid.Cells[0, I] <> 'done' then
begin
inc(Q);
if Q > 5 then
Break;
Async(
procedure
begin
Memo1.lines.add('I=' + I.ToString() + ' Q=' + Q.ToString());
GetWebContent(I); //Get html a web page and update TStringGrid cell to 'done'
end
).Await(
procedure
begin
Memo1.lines.add('Done I=' + I.ToString() + ' Q=' + Q.ToString());
end);
end;
end;
end;
但是那是行不通的,I的值始终是相同的,我无法获得TStringGrid行的位置。
我该怎么做?在5个任务中创建5个,直到查询完所有网格线为止。
这不能冻结用户界面。
Ps:该代码将在计时器上每5秒进行验证。
谢谢!