我很抱歉提出这么简单的问题。这是我第一次在VCL中使用后台线程。所以我想知道在Async部分中使用局部变量是否安全?
procedure Tfrm1.ThreadedFillDataset;
var
ds : TOracleDataSet;
begin
lblThread.Caption := 'Thread start';
Async(
procedure
begin
// executed in background thread
//Sleep(3000);
ds := TOracleDataSet.Create(Self);
//SetVariables
ds.Open;
end)
.Await(
procedure
begin
ds.First;
while not ds.Eof do
begin
//Fill design time dataset on form
ds.Next;
end;
ds.Free;
lblThread.Caption := 'Thread finished';
end);
end;
假设我执行此方法三次,而没有完成第一个线程。这会导致问题吗?
你会建议另一种解决这个问题的方法吗? (使用后台线程查询数据库,将结果附加到VCL数据集中。)
感谢。
编辑:我已经检查了问题13348970的答案,我的问题被标记为副本。我得出结论,如果我的方法被调用3次,所有3个ds
局部变量将指向不同的内存地址,因此每个线程将访问其TOracleDataSet的本地副本,并且不会有任何问题。如果有人可以确认这一点我可以关闭这个问题,谢谢。