1

DriveInfo クラスを使用すると、時折 Windows メッセージ ポップアップが表示されます。

ドライブにディスクがありません。 ドライブ \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);

Web を調べてみると、これはまれなエラーであることがわかりましたが、マシンの環境問題が原因のようです (chrome などを実行しているときに発生すると報告されています)。多くの人が、古い USB 参照をクリーンアップすることでこれを修正しました。

このエラーは、メッセージを表示する以外に、プログラムの正常な動作を実際に停止するものではありません。(そして、catch ブロックに閉じ込められません)

配布され、エンド ユーザーの PC で実行される予定の wpf アプリケーションであるため、メッセージ ボックスは表示されません。どうすればこれを行うことができ、その影響は何ですか?

編集:

さらに調査した結果、コードがバックグラウンド ワーカーを介して実行され、その 2 つのインスタンスが同時に実行されているために、この動作が発生している可能性があることがわかりました。

同じコードを取得し、バックグラウンド ワーカーを使用せずに実行すると、問題なく実行されるようです。

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 に答える