I am writing a simple application where users can import data from a file on a 
CD/DVD.

To get a list of ready CD/DVD drives I am using this code

  /// <summary>
        /// Returns drives of specified type ~ and specified status.
        /// </summary>
        /// <param name="driveType">The type of drive one is primarily 
interested in</param>
        /// <returns>
        /// Drive designation of the first available drive for the specified 
DriveType or if none are ready, the
        /// drive designation of the drive where this assembly is being 
executed.
        /// </returns>
        private List<DriveInfo> GetDrivesOfType(DriveType driveType)
        {
            DriveInfo[] allDrives = DriveInfo.GetDrives();
            var selectedDrives = new List<DriveInfo>();
            // Look for first CD/DVD drive that is ready
            foreach (DriveInfo drive in allDrives)
            {
                if (drive.DriveType == driveType)
                    if (drive.IsReady)
                    {
                        selectedDrives.Add(drive);
                        // we only want the first ready CD/DVD drive
                        break;
                    }
            }
            // if there is no ready CD/DVD drive then get the drive info for
            // the drive where this assembly is executing.
            if (selectedDrives.Count == 0)
                selectedDrives.Add(new 
DriveInfo(Path.GetPathRoot(Assembly.GetExecutingAssembly().Location))); ;

            return selectedDrives;
        }

When I first use this method, it works fine.
When a user opens the drive, removes the CD/DVD, closes it again and waits for 
it to register the presence of new media, then as part of the process to read 
in a new file
the method is called again.

When called a second time, it hangs on DriveInfo[] allDrives = 
DriveInfo.GetDrives();

The actual application turn rogue. You cannot kill it off in windows task 
manager.
If debugging in Vs2008, the debugger eventually detaches the process and one 
can start again.

Is there any known reason why this sort of behaviour would occur?

I moved DriveInfo[] allDrives = DriveInfo.GetDrives();
So its called only once, but then it hangs on
if (drive.IsReady)

I can't seem to do anything to address this problem.
The DriveInfo class does not have anything that I can see t
One solution I have had is to run this in a separate thread and it if does not 
respond, kill the thread.
Ok that may deal with the hang-up but it still does not enable the user to open 
and process on the files on the CD/DVD media.

I have googled on this and seen other with similar issues. One suggestion is 
that the DriveInfo[] allDrives = DriveInfo.GetDrives();
Will usually return after 30 seconds but may take up to 3 minutes. In my case 
it does not return at all.

I am targeting .NET 3.5. Is it a framework problem, driver problem, some other 
problem?
Could it just be the machine I am using?
Anyone else experienced this sort of issue?


Regards Peter Maddin
Applications Development Officer
PathWest Laboratory Medicine WA
Phone : +618 9473 3944
Fax : +618 9473 3982
E-Mail : peter.mad...@pathwest.wa.gov.au
The contents of this e-mail transmission outside of the WAGHS network are 
intended solely for the named recipient's), may be confidential, and may be 
privileged or otherwise protected from disclosure in the public interest. The 
use, reproduction, disclosure or distribution of the contents of this e-mail 
transmission by any person other than the named recipient(s) is prohibited. If 
you are not a named recipient please notify the sender immediately.





Reply via email to