c# – DoDragDrop有时会冻结WinForms应用程序
发布时间:2020-12-15 17:13:43 所属栏目:百科 来源:网络整理
导读:我正在做一个Drag Drop到外部应用程序,如下所示: string[] files = new string[/* */];// get filesDataObject o = new DataObject(DataFormats.FileDrop,files);DoDragDrop(o,DragDropEffects.Copy | DragDropEffects.Move); 一些应用程序将采取文件并继续
我正在做一个Drag Drop到外部应用程序,如下所示:
string[] files = new string[/* */]; // get files DataObject o = new DataObject(DataFormats.FileDrop,files); DoDragDrop(o,DragDropEffects.Copy | DragDropEffects.Move); 一些应用程序将采取文件并继续处理它们,我的应用程序是免费的,但一些应用程序将使我的应用程序冻结,直到它处理所有文件…有什么办法可以解决这个问题吗?我试图在一个线程中做到这一点但是效果不是很好 – 它根本不起作用…所以,任何建议如何使这个代码不挂我的应用程序? 解决方法
.NET Control.DoDragDrop只是一个叫做Win32 api的wapper ..(等待它)..
DoDragDrop
所以它有同样的局限性. DoDragDrop只能从调用OleInitialize的线程调用,这使得线程成为STA(单线程单元)类型线程. 因为它只能由STA线程使用,并且API设计是同步的,所以您可以使用目标应用程序处理丢弃通知.这只是OLE拖放设计的一部分,无法更改. (OLE拖放实际上是在Windows 3x天内设计的,在Windows应用程序中甚至存在线程之前). 所以,你可以让这个工作在另一个线程IFF上,该线程是一个STA线程.您可能还必须使用interop来调用非托管的DoDragDrop函数. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |