C# – problem with searching subdirs

c++loopsmultithreading

I snaged this sub off the web to recursively search all the files including subdirectoires

If i point this sub to a large area ( ie mydocuments or C:) I get an error:

The CLR has been unable to transition
from COM context 0x1f6c48 to COM
context 0x1f6db8 for 60 seconds. The
thread that owns the destination
context/apartment is most likely
either doing a non pumping wait or
processing a very long running
operation without pumping Windows
messages. This situation generally has
a negative performance impact and may
even lead to the application becoming
non responsive or memory usage
accumulating continually over time. To
avoid this problem, all single
threaded apartment (STA) threads
should use pumping wait primitives
(such as CoWaitForMultipleHandles) and
routinely pump messages during long
running operations.

Here is the code
(I believe its because the sub is calling itself)

void DirSearch(string sDir)
{
    try
    {
        foreach (string d in Directory.GetDirectories(sDir))
        {
            foreach (string f in Directory.GetFiles(d))
            {
                string hash = GetMD5HashFromFile(f);
                Dic_Files.Add(f, hash);
            }
            DirSearch(d);
        }
     }
     catch (System.Exception excpt)
     {
         Console.WriteLine(excpt.Message);
     }
 }

Best Solution

The GetFiles method has an override that allows for recursive searching. I would try using that and see if your problem goes away...

void DirSearch(string sDir)
{
    try
    {
        var files = System.IO.Directory.GetFiles(sDir, "*.*", SearchOption.AllDirectories);
        foreach (string f in files)
        {
            string hash = GetMD5HashFromFile(f);
            Dic_Files.Add(f, hash);
        }
    }
    catch (System.Exception excpt)
    {
        Console.WriteLine(excpt.Message);
    }
}