2017-06-29 15 views
1

我想查詢連接的USB設備如下(C#,.NET 4.5,Win10)崩潰電話ManagementObjectSearchert.Get()與InvalidCastException的

using (ManagementObjectSearcher mos = new ManagementObjectSearcher("select DeviceID, Model from Win32_DiskDrive where InterfaceType='USB'")) 
{ 
    ManagementObjectCollection coll = mos.Get(); 
    foreach (ManagementObject drive in coll) 
    { 
    } 
} 

有趣的是,我在得到一個InvalidCastException Get()函數,沒有關於內部異常的更多信息。

System.InvalidCastException ist aufgetreten。的HResult = 0x80004002
Nachricht =模具angegebene Umwandlung ISTungültig。 Quelle的=Stapelüberwachung:上面的錯誤消息,英語bing.com

System.InvalidCastException做的

翻譯已經發生。的HResult = 0x80004002 消息=指定的轉換無效。來源=堆棧跟蹤:

更有趣的部分:如果我經過一段時間,在構建ManagementObjectSearch和Get()命令集合之間留出一點時間,它就可以工作。

這聽起來我好像得到()異步運行。任何人都可以對此有所瞭解嗎?

更新七月2日,2017年:

我在另一個系統上檢查,並得到了另一個更有意義的錯誤消息(抱歉德國的錯誤信息,也許有些你可以幫我仍然:-):

Assistentfürverwaltetes Debuggen「DisconnectedContext」ist aufgetreten。的HResult = 00000000 Nachricht = 助理獻給 verwaltetes Debuggen 「DisconnectedContext」:「Folgender Fehler BEIM Übergang在巢穴COM-Kontext 0x16d4d48獻給Diesen表示 RuntimeCallableWrapper:恩波ausgehender Aufruf卡恩nichtausgeführt werden,噠死Anwendung einen eingabe-synchronisierten Aufruf weiterleitet(Ausnahme馮HRESULT:0x8001010D (RPC_E_CANTCALLOUT_ININPUTSYNCCALL))。Dieser tritt在DER蔥AUF, 噠DER COM-Kontext 0x16d4d48,在DEM dieser RuntimeCallableWrapper 標準化。創建wurde,getrennt wurde奧德aufgrund EINES anderen Vorgangs ausgelastet IST UND巢穴Kontextübergangdeshalb nicht verarbeiten kan ñ。居wird KEIN代理verwendet,嗯死Anfrage一個死 COM-Komponenteつverarbeiten,UND Aufrufe werden DIREKT一個模具 COM-Komponente gesendet。 Dies kannDatenbeschädigungoder -verlust zur Folge haben。庵dieses問題つvermeiden,müssenSIE sicherstellen, DASS全部COM-Kontexte /公寓/線程所以蘭格beibehalten werden UND獻給巢穴Kontextübergangverfügbar信德,雙死Anwendung全部 RuntimeCallableWrappers,在ihnen enthaltene COM-Komponenten darstellen死,vollständig verarbeitet帽子「。

錯誤在bing中轉換爲英語。com爲快速響應:

託管調試助手「DisconnectedContext」發生了。 「 HResult = 0x00000000 message =」DisconnectedContext managed debugging assistant':「對於此RuntimeCallableWrapper,轉換到0x16d4d48的COM上下文 期間的Folgender錯誤:由於應用程序將呼叫路由到輸入同步的呼叫,因此呼叫不能運行 。 「 (來自HRESULT的異常:0x8001010D (RPC_E_CANTCALLOUT_ININPUTSYNCCALL))。這通常發生是因爲COM上下文因此無法處理0x16d4d48,其中此 RuntimeCallableWrapper創建,斷開連接或由於 被其他操作和上下文轉換耗盡。它不使用代理 處理對COM組件的請求,並且調用直接發送到 COM組件。可能會導致數據損壞或丟失結果。 「爲了避免這個問題,你必須確保所有的COM 上下文/公寓/線程只要被保留,可用於 背景轉換,直到應用程序已經完全處理了代表 包含這些COM組件都 RuntimeCallableWrappers。」

+0

的解決方案是什麼,如果你只是'的foreach(在的ManagementObject MO驅動器s.Get())'? – Pikoh

+0

@Pikoh同樣的結果 – JoeyD

+0

我只是想你的代碼和工程確定 – Pikoh

回答