1

使用 DriveInfo 类时,偶尔会显示一个窗口消息弹出窗口:

驱动器中没有磁盘。 请将磁盘插入驱动器 \Device\Harddisk1\DR1

我正在使用的代码是相当标准的:

var driveInfos = DriveInfo.GetDrives();
foreach (DriveInfo driveInfo in driveInfos)
{
    if (driveInfo.IsReady &&
        (driveInfo.DriveType == DriveType.Network || driveInfo.DriveType == DriveType.Removable))
        try
        {
            var driveText = string.Format("{0} ({1})", driveInfo.VolumeLabel, driveInfo.Name);

在网上查看后发现这是一个不常见的错误,但似乎是由于机器上的环境问题造成的(人们报告它在运行 chrome 之类的东西时发生)。很多人通过清理旧的 USB 引用解决了这个问题。

除了显示消息之外,该错误实际上并不会阻止程序正常工作。(并且不会被困在 catch 块中)

由于它是一个 wpf 应用程序,它将在最终用户的 PC 上分发和运行,我宁愿不显示消息框。我该怎么做?有什么影响?

编辑:

进一步调查表明,这种行为可能是由于代码正在通过后台工作程序执行并且它的两个实例同时运行而引起的。

采用相同的代码并在不使用后台工作人员的情况下执行它似乎可以毫无问题地运行。

4

1 回答 1

2

我测试了你的代码,它运行没有问题。它似乎正在使用driveInfo.IsReady导致您的问题,因为它需要每个驱动器(CD/DVD/...)。先查DriveType后查IsReady;像这样:

if (driveInfo.DriveType == DriveType.Network || 
    driveInfo.DriveType == DriveType.Removable)
    if (driveInfo.IsReady)
    {
       var driveText = string.Format("{0} ({1})",
                                     driveInfo.VolumeLabel, driveInfo.Name);
    }
于 2012-07-12T04:15:43.450 回答