在将数据上传或下载到云服务(使用TAzureBlobService或TAmazonStorageService)时,似乎没有任何方法可以获取有关上传/下载进度的反馈。
我可以看到最终调用了TIdTCPClientCustom.Connect,并且在该函数中它为连接创建了默认的IOHandler(如果不存在)(除非使用SSL,否则它不存在)。如果可以为该IOHandler设置OnWorkBegin,OnWorkEnd和OnWork事件,那么我可以跟踪进度,但是看不到这样做的方法。
如果使用SSL连接,则会创建一个IOHandler(例如在TAzureBlobService.PrepareRequest中),但是IOHandler是一个接口,没有OnWorkBegin等属性。
我认为解决方案是创建一个继承自TAzureBlobService或TAmazonStorageService的类,然后重写PrepareRequest方法。这样,我就可以访问TCloudHTTP实例(因为它是在PrepareRequest中创建的),并由此可以访问IOHandler。但是,如何创建该IOHandler(定义为接口)并设置事件(不属于该接口)?
谢谢
最佳答案
OnWork
事件由TIdComponent
和TIdCustomTCPClient
派生于TIdIOHandler
公开。 TIdIOHandler
不是接口。
在内部,TIdCustomTCPClient
会挂接到分配给它的任何OnWork
的IOHandler
事件。您应该将事件处理程序分配给OnWork
提供的TIdCustomTCPClient
事件,而不是直接分配给TIdIOHandler
。然后,在运行时分配哪种IOHandler
都没有关系。