以下は、バックグラウンドワーカーに出荷したいメソッドですが、メソッドの作成方法に基づいてそれを行う方法に苦労しています。あなたができるように、大丈夫なものは何も返しませんが、呼び出されるたびに directoryInfo オブジェクトが必要です。
private void getSizeForTargetDirectory(DirectoryInfo dtar)
{
// generate a collection of objects. files comes first and then directories.
foreach (Object item in collection )
{
if (item == file)
{
track the size of the files as you encounter.
}
else if (item == directory)
{
// found a new directory, recall the method. !!!
}
}
}
バックグラウンドワーカーを使用するのはこれが初めてなので、少し行き詰まっています。ここで見つかったヘルプのおかげで何かを実装しようとしましたが、メソッドが再帰的であることに気付いたときに行き詰まりました。
ビジー ループ中に進行状況を表示するにはどうすればよいですか?
doWork イベント ハンドラー メソッドを実装しましたが、下位のサブレベルで処理するファイルやフォルダーがさらにある場合は、何らかの方法でメソッドを呼び出す必要があることに気付きました。
現在選択されているノードがディレクトリの場合、'getSizeForTargetDirectory()' メソッドを呼び出す単純なボタン クリック イベント ハンドラがあります。
private void retrieveInfoButton_Click(object sender, EventArgs e)
{
// check to see if the path is valid
// reset the labels and textfields.
string fullPath = treeDrives.SelectedNode.FullPath;
string sNodesName = treeDrives.SelectedNode.Text;
if (directory) // Enter here if its a directory.
{
string parentPath = treeDrives.SelectedNode.Parent.FullPath;
DirectoryInfo[] dirArray = populateFoldersArray(parentPath);
for (int i = 0; i < dirArray.Length; i++)
{
if (dirArray[i].Name == sNodesName)
{
getSizeForTargetDirectory(dirArray[i]);
// do work !
うまくいけば、それが私がやろうとしていることと、それをどのように行っているかを説明しています. 質問は、出荷しようとしている作業の大部分が再帰的なメソッドから来ているときに、バックグラウンド ワーカー クラスの進行状況レポート機能をどのように使用できるかです。
初期のテストを通じて、いくつかの調整を行った後、getSize メソッドが非常に効率的であり、現在提供されているフォルダーのサイズ情報を非常に迅速に報告したことに気付きましたが、非常に強力な開発マシンを使用しているため、すべてのユーザーに当てはまるとは限りません。
読んでくれてありがとう、誰かが助けてくれることを願っています!!!