请创建一个新的FMX应用程序,添加一个按钮和一个备忘录来运行此示例。我有这样的代码:
procedure TForm1.Button1Click(Sender: TObject);
begin
TTask.Run(procedure
var
client: TIdHTTP;
result: string;
begin
client := TIdHTTP.Create(nil);
try
try
client.ReadTimeout := 4000;
client.ConnectTimeout := 4000;
result := client.Get('a valid url here just as test');
TThread.Synchronize(nil, procedure
begin
Memo1.Lines.Add(result);
end);
except
on E: Exception do
begin
TThread.Synchronize(nil, procedure
begin
Memo1.Lines.Add(E.Message);
end);
end
end;
finally
client.Free;
end;
end);
end;
它和我预期的一样工作,但问题是在IDE中。如果我将光标放置在匿名函数的正文中,就会自动得到finally语句的结尾。
我怎么才能解决这个问题?
首先我在这里
然后我按回车,我有这个!
如果将光标放在行首而不是行尾,则可以在不完成的情况下添加新的空格。如何解决这个问题?嗯,我发现这个问题的发生是因为有这样的代码:
TThread.Synchronize(nil, procedure
begin
Memo1.Lines.Add(result);
end);
如果删除此代码,问题就不会再发生了。这是IDE中的一个bug吗?
发布于 2018-09-24 09:06:15
这是IDE中的一个bug吗?
是的,这是IDE中的一个bug。您的代码在语法上是有效的。
我怎么才能解决这个问题?
避免这种情况的最佳方法是创建代码并将其包围为try...except...
,以处理任何异常:
try
MyClass := TComponent.Create(Self);
try
finally
MyClass.Free;
end;
except on E: Exception do
end;
所以你的代码是:
TTask.Run(procedure
var
client: TIdHTTP;
result: string;
begin
try
Client := TIdHTTP.Create(nil);
try
client.ReadTimeout := 4000;
client.ConnectTimeout := 4000;
result := client.Get('a valid url here just as test');
TThread.Synchronize(nil, procedure
begin
Memo1.Lines.Add(result);
end);
finally
Client.Free;
end;
except on E: Exception do
begin
TThread.Synchronize(nil, procedure
begin
Memo1.Lines.Add(E.Message);
end);
end;
end;
end;
发布于 2018-09-25 04:28:09
这是IDE中的一个bug吗?
是。这是个缺陷。请向质量门户提交一份报告。
https://stackoverflow.com/questions/52483218
复制