2009-10-23 1 views
2

.NET 3.5에서 파일 관리자를 쓰고 있습니다. 시작시 응용 프로그램은 사용 가능한 드라이브를 나열해야합니다. 나는 그것을하기 위해 DriveInfo.GetDrives를 사용하고있다.System.IO.DriveInfo.GetDrives()는 연결이 끊긴 네트워크 드라이브와 연결을 끊습니다.

불행히도 내 사용자는 네트워크 드라이브 연결이 끊어지면 응용 프로그램을 시작하는 데 약 30 초가 걸렸습니다.

연결이 끊어진 네트워크 드라이브가있을 때 GetDrives() 함수가 몇 초 동안 중단된다는 것을 발견했습니다. UI가 정지됩니다. 이것은 시동시, 그리고 새 드라이브를 연결할 때마다 발생합니다.

요약하면 네트워크 드라이브가 연결되어 있지 않아도 즉시 반환되는 사용 가능한 드라이브를 나열하는 방법이 필요합니다. 어떤 도움을 주셔서 감사합니다.

추가 정보 :

  1. 나는 WMI 몇 가지 테스트를했고, 같은 문제가 발생합니다. WMI 쿼리는 15 초 정도 후에 반환됩니다.

  2. 또한 DriveInfo에 대한 호출을 별도의 스레드로 이동하는 것을 고려했습니다. 이렇게하면 사용자 인터페이스를 차단하지 않는 문제가 해결됩니다. 사용자가 새 드라이브를 연결하면 드라이브 아이콘이 15 초 후에 만 ​​나타납니다. 그것은 이상적이지 않습니다.

도움 주셔서 대단히 감사합니다.

+0

솔루션 2로 인해 새 드라이브에 15 초 지연이 발생하는 것을 보지 못했습니다. 영향을받는 드라이브 문자를 알림 메커니즘에서 가져올 수 없기 때문에 GetDrives()를 다시 호출한다고 가정합니다. 그렇게한다면 비싼 GetDrives() 호출없이 새로운 드라이브 집합을 쉽게 계산할 수 있습니다. – MSalters

+0

정확히 : 사용자가 USB 드라이브를 연결하면 WM_DEVICECHANGE + DBT_DEVICEARRIAL이라는 메시지가 표시되지만 새로 연결된 드라이브의 문자를 가져 오는 방법을 볼 수 없어 GetDrives()를 다시 호출합니다. 당신은 내가 이것을 피할 수 있다고 말하지만, 어떻게 볼 수는 없습니다. 설명해 주시겠습니까? 감사 – seguso

답변

0

차단을 피할 방법이 없다는 사실을 두려워합니다. Windows API의 네트워크/파일 시간 초과로 인한 것입니다.