私は、データをドラッグアンドドロップして、その上に潜在的に非常に長い操作を実行するアプリケーションを持っています。これは問題なく動作しますが、アプリケーションが処理中にエクスプローラウィンドウがフリーズします。ファイルリストのコピーを取ってすぐに話すように「リリースする」方法はありますか?Fix Drag Drop Freezing Explorer
私の現在のコードは次のとおりです。あなたは、イベントが完了するまで実行できるようにする必要がある
private void MainForm_DragDrop(object sender, DragEventArgs e)
{
ClearTempFiles(); //Clear all files before populating
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); //Get the filepaths for the dragdrop data
List<string> toParse = new List<string>();
foreach (string file in files)
{
FileAttributes attr = File.GetAttributes(file);
if (attr.HasFlag(FileAttributes.Directory)) //If a folder has been included, add all files from within
{
toParse.AddRange(DirSearch(file));
}
else
{
toParse.Add(file); //Add files
}
}
CurrentJobData = new JobData(toParse); //Create new JobData from these files <---- Takes up to a few minutes with hundreds of files.
CurrentJobData.ToTree(treeView1); //Push this data to the TreeView
} //Handles the dragdrop of data, populating the solution
長時間実行されるタスクは、バックグラウンドスレッドで実行する必要があります。 'Task'sまたは' ThreadPool'を使います。 – dymanoid
[BackgroundWorker](https://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker(v = vs.110).aspx)を使用することもできます。 [backgroundworkerを使用する方法?](http://stackoverflow.com/q/6481304/669576)。 –
この処理が完了するまで、プログラム自体を続行したり、応答(進行状況バーを表示しない)したくないです。それはバックグラウンドで実行できるものではありません。私は単に、Windowsエクスプローラをフリーズすることはちょっとしたことだと思って、その周りに道があるかどうか疑問に思っていました。 –