如何使DragDrop.DoDragDrop异步?

时间:2017-09-25 23:11:55

标签: 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的实现。

1 个答案:

答案 0 :(得分:-2)

而不是试图制作' DoDragDrop'方法异步执行,最好在不同的线程上执行文件复制,因为这将允许运行WPF应用程序UI的主线程继续运行(不冻结)而另一个线程正在执行复制文件的繁重I / O操作。完成另一个线程后,您可以通知主线程已完成显示状态消息,表明文件复制已完成。