如何拖拽大量的文件而不消耗系统资源?

我正在处理的程序中的一个function是将对象从其主窗口拖放Windows资源pipe理器中作为文件。

为此,我们重写COleDataSource::OnRenderGlobalData() ,当格式为CF_HDROP ,我们将每个对象保存为一个文件。 当对象数量很小时,这工作正常。

但是,由于我们正在努力支持企业级别的对象,因此当用户试图将大量对象从我们的应用程序拖放到Windows资源pipe理器中时,我们看到很大的延迟,有时会导致挂起或最终崩溃。

我的猜测是,这是因为OnRenderGlobalData()被调用了很多次,当然,每次必须遍历被拖动的对象并将它们保存为文件。

我正在研究覆盖OnRenderFileData()的想法,但问题是它一次只处理一个文件。

有什么办法可以加快我们的应用程序,当用户试图拖动大量的对象到Windows资源pipe理器,最好是通过将保存循环移动到只能执行一次,当实际下降发生的地方?

拖动在放置时生成的虚拟数据,而不是创建文件。 提供CFSTR_FILEGROUPDESCRIPTOR和CFSTR_FILECONTENTS。 这是一个例子 。

我也有同样的问题。 我的'解决方案'不是很聪明。 我提供拖放作为方便少​​数的对象。 如果使用选择的对象数量超过了可处理的对象数量,则禁用拖放功能,而用户必须从文件夹浏览器对话框中选择目标。 选择目的地时,对象将被写入文件,并带有进度指示器。