我使用URLDownloadToFile()为我的游戏下载更新文件。该函数是同步的,所以我让它在一个单独的线程中运行,我使用IBindStatusCallback(特别是onProgress()函数)来处理进度条和取消。它似乎工作得很好。
现在我正在处理超时机制,以便下载在挂起时取消。因此,在测试期间,我认为我会通过断开互联网来中断下载。当我这样做时,下载完全冻结,似乎永远。 URLDownloadToFile永远不会返回。更糟糕的是,IBindStatusCallback :: onProgress()函数再也没有被调用过。这意味着我无法告诉流程取消。
如果恢复了连接,有时下载会恢复,但有时候它不会恢复,只会永远坐在那里。
这让我觉得我不应该首先使用这种技术,但除了这个问题之外,它只是如此简单和实用。有没有解决这个问题的方法?
我正在使用Windows 7进行开发,而且我在谷歌搜索时已经阅读过这个问题可能会出现在某些版本的Windows上但不适用于其他版本...
编辑:可能值得一提的是,此功能包含在Internet Explorer平台API的URL Moniker集中(在Urlmon.lib中)。可能的API或命令中有一些单独的功能可用于取消下载或以其他方式解决问题。