冻结 Indy HTTP。上AndroidDelphi11个内帖

Freezing Indy HTTP. Get on Android Delphi 11 inside thread

我最近从 Delph 10.2 迁移到 Delphi 11。 这段代码的基础是我在线程内定期从服务器获取 http。

  myth := TThread.CreateAnonymousThread(
  procedure
    var IdHTTP1:TIdHTTP;
  begin

        ...
        ...
        IdHTTP1:=TIdHTTP.Create();
        IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) 
          Gecko/20100101Firefox/12.0';
        ...
        ...
        IdHTTP1.Get(Url,ResStm);
        ...
        ...

 end);
 myth.start

此代码 运行 在 Delphi 10.2 上没有任何冻结,但在 Delphi 11 上冻结此行 'IdHTTP1.Get(Url,ResStm);' 超过 5 秒。

用于更新表单内容的同步过程的错误位置是导致此冻结的原因。

TThread.Synchronize (TThread.CurrentThread,procedure ()
  begin
    ....
    ...
    ...
  end);

通过限制这个包围结构到一些必要的行,冻结限制到 毫秒,这并不明显。 例如:我将流的解压缩放在同步之外。

最后提一下:这次冻结发生在Delphi 11