2017-09-25 77 views
0

我使用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報告的「異步」實現。

+0

你的應用程序在哪裏凍結?你釋放鼠標嗎?如果您希望有人能夠幫助您,請提供問題的回購問題:https://stackoverflow.com/help/mcve – mm8

回答

-2

而不是試圖使'DoDragDrop'方法異步執行,最好在不同的線程上執行文件複製,因爲這樣可以讓運行WPF應用程序的UI的主線程繼續在另一個線程執行復制文件的繁重I/O操作時運行(不凍結)。一旦另一個線程完成,您可以通知主線程它已完成顯示一條狀態消息,表示文件複製已完成。

+0

複製文件的繁重工作由Windows資源管理器處理,因此它超出了我的控制。 – Peter

+0

但是,如果您拖放拖動的文件時,您會編寫代碼以執行操作,就像在這種情況下,我相信您會編寫代碼來調用文件複製操作。 '私人無效StackPanel_Drop(對象發件人,DragEventArgs e) { //您的代碼在調用方法來複制文件之前。 //複製文件的方法。 File.Copy(一些參數); }' – Khaimeng