Delphi代码完成因匿名方法而失败

时间:2018-09-24 16:01:53

标签: delphi delphi-10.2-tokyo

请创建一个新的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语句。

我该如何解决?


首先我在这里

enter image description here

然后按Enter键,我有了这个!

enter image description here

如果将光标放在行的开头而不是行的结尾,则可以添加新的空格而无需完成。如何解决这个问题呢?好吧,我发现发生此问题是因为有以下代码:

TThread.Synchronize(nil, procedure
                         begin
                           Memo1.Lines.Add(result);
                         end);

如果删除此代码,则不会再出现此问题。这是IDE中的错误吗?

2 个答案:

答案 0 :(得分:7)

  

这是IDE中的错误吗?

是的。这是一个缺陷。请向质量门户网站提交报告。

答案 1 :(得分:2)

  

这是IDE中的错误吗?

是的,这是IDE中的错误。您的代码在语法上是有效的。

  

我该如何解决?

避免这种情况的最好方法是创建代码,并用org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: WorkflowScript: 49: illegal string body character after dollar sign; solution: either escape a literal dollar sign "\$5" or bracket the value expression "${5}" @ line 49, column 13. sh """ ^ 括起来以处理任何异常:

try...except...

所以您的代码将是:

  try
    MyClass := TComponent.Create(Self);
    try

    finally
      MyClass.Free;
    end;
  except on E: Exception do
  end;