【问题标题】:indy GET dowloading speedindy GET 下载速度
【发布时间】:2011-05-23 22:00:53
【问题描述】:

欢迎,

我必须使用 indy http get 组件在我的应用程序中创建包含下载速度信息的标题。

在我看来,我找到了简单的解决方案。

在onwork 活动中,我将获得下载的实际进度(大小)并将其与之前的阅读进行比较。 (例如每 5 秒)。当前大小减去以前的大小(5 秒 eariel,存储在全局变量中)除以 5 秒 * 8,我将获得速度。 如果实际大小与之前相同,则速度始终为 0。

所以我想开始编码,但我在名为 odwork 的简单函数中发现了问题。

过程 TForm1.HttpWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64); 开始 showmessage('你好,我在这里'); 结尾;

问题是,该函数没有被调用... 我不知道为什么。

我正在下载 100 MB 的文件,但我看不到任何显示信息...

有什么想法吗? 问候

【问题讨论】:

    标签: delphi lazarus indy10 idhttp


    【解决方案1】:

    您是否也将 httpwork 分配给组件? onprogress 还是 onwork,不管它叫什么?

    另外,请使用标签,而不是在您单击之前不会返回的模态组件,因为这可能会中断下载流程。

    【讨论】:

    • 现在,我手动添加 onwork
       form1.Http := TIdHTTP.Create(nil); form1.Http.OnWork:=form1.HttpWork; 
      但编译器失败
      unit1.pas(356,36) 错误:为调用“HttpWork”指定的参数数量错误
      我只是添加了该显示消息以了解将触发函数的位置...我试试 memo1.lines.add('test');但也没有用;)
    • 当 HttpWork 的预期参数数量甚至与您所使用的方法的参数数量不同时,会出现错误数量的参数。请在此处复制粘贴代码,以便人们能够帮助您,否则信息不多。
    【解决方案2】:

    只有在事先调用了连接的 BeginWork() 方法时才会触发 OnWork... 事件。 Indy 的许多读/写方法不会自动调用它。但是,TIdHTTP 使用 TStream 对象读取/写入请求/响应正文数据,并且连接的读取/写入 TStream 方法确实在内部调用 BeginWork(),因此您肯定会在 HTTP 操作期间触发 OnWork... 事件。

    【讨论】:

      【解决方案3】:

      我不得不说您的 HTTPWork 事件没有与组件挂钩。如果表单上有 HTTP 组件,请调出属性并双击 OnWork 事件,然后放入 ShowMessage...它应该会显示出来。

      【讨论】:

        猜你喜欢
        • 2018-07-15
        • 2012-11-19
        • 2021-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-03
        • 2011-09-13
        • 2012-02-06
        相关资源
        最近更新 更多