gpt4 book ai didi

c# - 在调用 DoDragDrop 方法后执行拖放实现

转载 作者:太空狗 更新时间:2023-10-30 00:59:12 25 4
gpt4 key购买 nike

我已经为此苦苦挣扎了一段时间

我的应用程序包含一个 ListView ,填充了位于服务器上的文件名。

我正在尝试实现拖放功能,以便用户可以将文件从我的应用程序拖到他/她的本地计算机中。

为此,我首先将文件下载到一个临时位置,然后调用我的应用程序的 DoDragDrop() 方法。

问题是我只想在调用 DoDragDrop 方法之后执行下载过程。

我已经尝试了与拖放方法相关的所有事件(GiveFeedback、ItemDrag 等...),但没有任何效果

所以基本上我需要的是一个事件,在 DoDragDrop 完成后引发

有什么想法吗??

最佳答案

不确定如何在 .NET 中执行此操作,但在常规 Win32 编程中,实现 IDataObject 接口(interface)的对象也可以选择实现 IAsyncOperation 接口(interface)。然后 IDropTarget 可以使用该接口(interface)在后台线程中执行拖放操作,这样源和目标在实际传输过程中就不会被阻塞。唯一的问题是目标,而不是源,决定是否利用这一点。

另一种方法是使用“优化移动”传输,其中 IDataObject 提供文件名,IDropTarget 直接移动文件。

MSDN 对此有详细说明:Handling Shell Data Transfer Scenarios .

当然,这仍然意味着您必须在开始拖放之前下载文件。确实没有办法执行拖放来确定目标,然后再执行下载。不过,您可以做的是让 IDataObject 保留 CFSTR_FILEDESCRIPTORCFSTR_FILECONTENTS 条目(此处描述:Shell Clipboard Formats),其中 CFSTR_FILEDESCRIPTOR 是从用于填充 ListView 的信息中填充,CFSTR_FILECONTENTS 使用 IStream 接口(interface),其实现在实际放置操作期间而不是之前执行下载。至少这样,您只下载目标实际需要的文件,可以跳过其余部分。

将其与 IAsyncOperation 结合使用,这可能会为您提供所需的最终效果。

关于c# - 在调用 DoDragDrop 方法后执行拖放实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1036868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com