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

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

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

我认为解决方案是创建一个继承自TAzureBlobService或TAmazonStorageService的类,然后重写PrepareRequest方法。这样,我就可以访问TCloudHTTP实例(因为它是在PrepareRequest中创建的),并由此可以访问IOHandler。但是,如何创建该IOHandler(定义为接口)并设置事件(不属于该接口)?

谢谢

最佳答案

OnWork事件由TIdComponentTIdCustomTCPClient派生于TIdIOHandler公开。 TIdIOHandler不是接口。

在内部,TIdCustomTCPClient会挂接到分配给它的任何OnWorkIOHandler事件。您应该将事件处理程序分配给OnWork提供的TIdCustomTCPClient事件,而不是直接分配给TIdIOHandler。然后,在运行时分配哪种IOHandler都没有关系。

10-05 22:16