2017-09-25 31 views
0

私はDragDrop.DoDragDropを使用して、C#WPFアプリケーションからWindowsエクスプローラにファイルをコピーします。ただし、ファイルの実際のコピーによって、コピーが完了するまでWPFアプリケーションがフリーズします。このコピー操作は、数秒から数分続く可能性があります。DragDrop.DoDragDrop asyncを作成するには?

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 Explorerによって処理されるため、私のコントロール。 – Peter

+0

しかし、この場合のように、ドラッグしたファイルを「ドロップ」したときにアクションが実行されるようなコードを記述しておけば、ファイルのコピーアクションを呼び出すためのコードを記述することができます。 'Private void StackPanel_Drop(オブジェクト送信者、DragEventArgs e) { //ファイルをコピーするメソッドを呼び出す前のコード。 //ファイルをコピーする方法。 File.Copy(いくつかのパラメータ)。 } ' – Khaimeng

関連する問題