Windowsフォームアプリケーションで、リモートマシンの共有フォルダーにアクセスするユーザーの機能をテストしようとしています。私がこれを行っている方法(そしてもっと良い方法があると確信しています...しかし私はそれらを知りません)は、リモートマシン上の特定のディレクトリの存在をチェックすることです(私はこれを行っています組織内で直面しているファイアウォール/その他のセキュリティ制限のため)。ユーザーが共有フォルダーにアクセスする権限を持っている場合、すぐに戻りますが、そうでない場合は、永久にハングします。これを解決するために、チェックを別のスレッドにスローし、1000ミリ秒だけ待ってから、ユーザーが共有にアクセスできないと判断しました。ただし、これを行うと、同じスレッドで実行されなかったかのようにハングします。
何がハングしているのですか?どうすれば修正できますか?それが別のスレッドにあるという事実は、私がバックグラウンドでそれ自身でスレッドを終了させることを可能にするだろうと思います。
これが私のコードです:
bool canHitPath = false;
Thread thread = new Thread(new ThreadStart(() =>
{
canHitPath = Directory.Exists(compInfo.Path);
}));
thread.Start();
thread.Join(1000);
if (canHitPath == false)
{
throw new Exception("Cannot hit folder: " + compInfo.Path);
}
編集:例外をスローする行はHITであることを追加する必要があると思います。私はこれをデバッグして検証しました...しかし、例外がスローされたとき、それは私のプログラムがハングしたときです。(例外が呼び出し元のメソッドでキャッチされ、デバッガーでcatchステートメントに到達しないことも追加する場合があります。)