c# - 如何使 DragDrop.DoDragDrop 异步?

标签 c# wpf asynchronous drag-and-drop clipboard

我使用 DragDrop.DoDragDrop 将文件从我的 C# WPF 应用程序复制到 Windows 资源管理器。但是,文件的实际复制导致我的 WPF 应用程序卡住,直到复制完成。此复制操作可能会持续几秒到几分钟。

DataObject dragdata = new DataObject(DataFormats.FileDrop);
System.Collections.Specialized.StringCollection sc = new System.Collections.Specialized.StringCollection();

//fill the StringCollection with filenames

dragdata.SetFileDropList(sc);
DragDrop.DoDragDrop(listviewitem, dragdata, DragDropEffects.Copy);

如何在不卡住/锁定我的应用程序的情况下调用 DoDragDrop 方法?我无法理解所报告的 DataObject 的“异步”实现。

最佳答案

与其尝试使“DoDragDrop”方法异步执行,不如在不同的线程上执行文件复制,因为这将允许运行 WPF 应用程序 UI 的主线程继续在另一个线程执行复制文件的繁重 I/O 操作时运行(不卡住)。一旦另一个线程完成,您可以通知您的主线程它已完成,以显示一条状态消息,表明文件复制已完成。

关于c# - 如何使 DragDrop.DoDragDrop 异步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46415477/

相关文章:

c# - 使用 C# 将文本框添加到网格

c# - 访问 DataReader 中的特定行

wpf - 在 MVVM 中创建 ViewModel 的最佳位置

c# - 绑定(bind)到 TabControl SelectedIndex

android - Flutter - Navigator.pushNamed 使应用程序在调用路线时崩溃(在 FutureBuilder 内)

c# - 如何在 Outlook 中添加新选项卡。使用 Visual Studio 2013 进行 Outlook 插件/插件开发

c# - 开始了解 Web 套接字和 http 请求(和 STOMP)

c# - Popup 中的 UI 虚拟化

c# - 对 CancellationTokenSource.Cancel 的调用永远不会返回

python - 从单个 FTP 服务器进行多线程/异步下载