Come inserire lo slot USB nell'hub subito dopo averlo collegato?
Sto implementando uno scenario in cui dovrei prendere lo slot di una USB subito dopo averlo collegato. 15 è quello che voglio.
Il codice funziona correttamente dopo aver collegato il primo USB. Quando collego la seconda USB prima di 1 minuto dopo che la prima è stata collegata, non ricevo alcuna informazione per la seconda USB che è già collegata. Ti mostrerò il codice che gestisce il recupero delle informazioni sullo slot. Questo metodo viene eseguito dopo un evento attivato quando viene collegata una USB.
Cosa principale: devo aspettare più di 1 minuto, poi posso collegare la seconda USB e prendere lo slot. Se lo collego prima di aspettare 1 minuto dopo che il primo è stato collegato, non prendo alcuna informazione per l'ultimo USB collegato.
static int GetPhysicalPort()
{
try
{
devices = new List<USBDeviceInfo>();
ManagementObjectCollection collection;
using (var searcher = new ManagementObjectSearcher(@"Select * From Win32_PnPSignedDriver WHERE DeviceId LIKE 'USB\\VID%' AND Description = 'USB Mass Storage Device' "))
{
collection = searcher.Get();
searcher.Dispose();
}
foreach (var device in collection)
{
devices.Add(new USBDeviceInfo(
(string)device.GetPropertyValue("DeviceId"),
(string)device.GetPropertyValue("Description"),
(string)device.GetPropertyValue("Location")
));
}
collection.Dispose();
string LastAdded = devices[0].Location.Substring(6, 4);
Console.WriteLine(LastAdded);
return Convert.ToInt32(LastAdded);
}
catch (Exception e)
{
Console.WriteLine(e);
return 0;
}
Risposte
Come per WMI Win32_PnPSignedDriverclasse, sarebbe l'applicazione che impiegherebbe molto tempo per interrogare o fornire risultati per l'USB inserita la seconda volta. Ciò dipende dall'applicazione all'applicazione poiché la frequenza dei poli o la velocità di risposta di quell'applicazione che esegue questa query WMI sarebbe progettata in modo tale da fornire risultati in 1-2 minuti.
Potremmo controllare lo stesso in termini di livello di sistema operativo o livello WMI per vedere se WMI nel suo complesso impiega tempo per fornire risultati di query sulla macchina.
- Apri il comando Esegui e digita WBEMTEST.
- Fare clic su Connetti poiché si connetterà allo spazio dei nomi CIMV2. Sotto questo spazio dei nomi si trova la classe Win32_PnPSignedDriver
- Come quando interroghiamo questa classe con la query select * da win32_PnPSignedDriver, ci mostra istantaneamente alcuni risultati come per esempio 60-70.
- Ora quando lo chiudi ed esegui di nuovo la stessa query, mostrerà più o gli stessi risultati a seconda del sistema operativo, ecc.
Quanto sopra ci mostrerà che la query WMI o WMI nel suo insieme funziona come dovrebbe essere sulla macchina.
Il problema potrebbe essere causato dall'applicazione che impiega così tanto tempo per leggere il contenuto della seconda USB secondo la query WMI che sta interrogando.