如何使DragDrop.DoDragDrop异步?
问题描述:
我使用DragDrop.DoDragDrop
将文件从我的C#WPF应用程序复制到Windows资源管理器。但是,实际复制文件会导致我的WPF应用程序冻结,直到复制完成。此复制操作可能会持续几秒到几分钟。如何使DragDrop.DoDragDrop异步?
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操作时运行(不冻结)。一旦另一个线程完成,您可以通知主线程它已完成显示一条状态消息,表示文件复制已完成。
你的应用程序在哪里冻结?你释放鼠标吗?如果您希望有人能够帮助您,请提供问题的回购问题:https://*.com/help/mcve – mm8