3

将数据上传或下载到云服务(使用 TAzureBlobService 或 TAmazonStorageService)时,似乎没有任何方法可以获取有关上传/下载进度的反馈。

我可以看到最终调用了 TIdTCPClientCustom.Connect ,并且在该函数中,如果不存在连接,它会为连接创建一个默认的 IOHandler(除非使用 SSL,否则它不会)。如果我可以为该 IOHandler 设置 OnWorkBegin、OnWorkEnd 和 OnWork 事件,那么我可以跟踪进度,但我看不到这样做。

如果使用 SSL 连接,则创建一个 IOHandler(例如在 TAzureBlobService.PrepareRequest 中),但 IOHandler 是一个接口并且没有 OnWorkBegin 等属性。

我认为解决方案是创建一个派生自 TAzureBlobService 或 TAmazonStorageService 的类,然后覆盖 PrepareRequest 方法。在那里我可以访问 TCloudHTTP 实例(因为它是在 PrepareRequest 中创建的),然后我可以访问 IOHandler。但是如何创建 IOHandler(因为它被定义为接口)并设置事件(不是该接口的一部分)?

谢谢

4

1 回答 1

1

OnWork事件由 公开,两者均TIdComponent源自。 不是接口。TIdCustomTCPClientTIdIOHandlerTIdIOHandler

在内部,TIdCustomTCPClient挂钩到分配给它OnWork的任何事件。IOHandler您应该将事件处理程序分配给OnWork由 提供的事件TIdCustomTCPClient,而不是TIdIOHandler直接分配。IOHandler那么在运行时分配哪种类型的就无关紧要了。

于 2012-02-23T20:06:15.107 回答