【问题标题】:Asynchronous Drag and Drop to Windows Explorer异步拖放到 Windows 资源管理器
【发布时间】:2012-03-07 11:03:51
【问题描述】:

问题:

我需要一个 DragAndDrop 解决方案,以便将文件拖放到 C# 和 .NET 4.0 的 Windows 资源管理器的文件夹中。不必将文件保存在计算机上。该文件将足够大,以至于拖动时间不足以完成下载。我发现了各种问题,甚至是接受的答案,但没有任何效果。最接近工作的是这个演示项目:

http://blogs.msdn.com/b/delay/archive/2009/11/16/creating-something-from-nothing-and-knowing-it-developer-friendly-virtual-file-implementation-for-net-refined.aspx

如何实现此代码以下载文件作为将文件放到 Windows 资源管理器中放置位置的操作的一部分?

【问题讨论】:

  • 从哪里拖动?来自您的应用程序?
  • 是的,来自我的应用程序。例如包含文件 URL 的文本框。
  • 一个可能的考虑选项是将 shortcut 放到目标目录中(因此,创建快捷方式文件很快),并且快捷方式指向其他地方的文件(下载似乎是一个不错的选择),您随后在后台下载文件时填写它。如果您将快捷方式指向已完成的文件名,但在填充时在末尾添加 .partial 并在完成后重命名,则该快捷方式仅在文件完全下载后才能访问该文件。不理想,但可能会让你出局。
  • 基本上这是可能的,但很复杂......你需要一个 shell 扩展和其他一些东西才能让它顺利工作...... MS说这不受 .NET 支持(甚至是 V 4 !)虽然“可能”......发布一个基本上说“我发现一些不起作用的东西 - 让它工作”的问题不会给你一个有效的解决方案......谷歌搜索“shell扩展拖放”并回来有具体问题...
  • @Akku 感谢您的编辑...您发布的链接不会为您提供有效的解决方案...正如我在之前的评论中所写:实施这样的机制是一项重大/严肃的任务(尤其是使用不同的 Windows 版本和/或 .NET)... google 搜索“shell 扩展拖放” - 这将帮助您了解此类解决方案中涉及的内容,然后您可以根据位置提出具体问题你被困在执行过程中......

标签: c# winapi .net-4.0 drag-and-drop ole


【解决方案1】:

Web 浏览器每天都在解决这个问题。稍微简化他们的模型,这样做:

  1. 根据适当的命令行参数制作一个执行下载的小程序。这个小程序应该会弹出一个带有进度条和取消按钮的窗口。

  2. 每当用户“丢弃”某些东西时,都会生成第二个程序。该程序将立即创建目标文件并开始用数据填充它。它将在文件上保持适当的锁定,直到下载完成,此时“下载器”将退出。

如果您要在原始程序中保留“下载程序”线程,您将需要某种下载管理器,以便用户可以在下载时获得适当的反馈。

【讨论】:

  • 不小心点赞了。这不能解决问题!您需要知道文件被删除的位置,因为我坚信网络浏览器也无法知道这一点,除非他们使用临时文件和文件系统观察器。例如,有人将图像拖到桌面上的文件夹中。命令行参数是什么?如果我能知道文件被删除的位置,即使在同一个应用程序中也不会成为问题。把它放在不同的过程中实际上没有任何帮助。
  • 也许网络浏览器提示保存位置而不是允许放置的方法更合适?
  • 一旦您使用对话框询问位置,拖放的整个想法就不再合适了。
【解决方案2】:

好的,正如 Yahia 在 cmets 中所说,如果没有针对不同版本的 Windows 和 .NET 的适当 shell 扩展,这是不可能的。您可能对我发布的链接感到幸运,但对我来说,它会使 Explorer 崩溃,而开发人员认为它可以正常工作。

我的诚实意见是,只有 .NET,您只能使用 FileSystemWatcher 通过复制特殊的 .temp 文件、观察它们的位置、执行任务并在完成任务时替换 .temp 文件来完成。悲伤的窗户。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    相关资源
    最近更新 更多