Среда: приложение Windows Forms, C # .NET 3.5, VS2008
Когда я вызываю следующую функцию из переопределенного обработчика WndProc, я получаю это исключение в строке mc.GetInstances (). COMExcepion не обрабатывается -Приложение вызвало интерфейс, который был упорядочен для другого потока. (Исключение из HRESULT: 0x8001010E (RPC_E_WRONG_THREAD)) "
Это гораздо более загадочное сообщение фактически отображается перед ранее упомянутым исключением:
"Обнаружен DiconnectedContext - контекст 0x3333b40 отключен. Прокси-сервер не будет использоваться для обслуживания запроса на COM-компонент. Это может привести к повреждению или потере данных. Чтобы избежать этой проблемы, убедитесь, что все контексты / апартаменты остаются живыми, пока приложение не будет полностьюсделано с RuntimeCallableWrappers, которые представляют COM-компоненты, которые живут внутри них. "
private bool IsRemovableDevice(char dl)
{
ManagementClass mc = new ManagementClass("Win32_LogicalDisk");
ManagementObjectCollection partitions = mc.GetInstances();
string bleh = "";
foreach (ManagementObject p in partitions)
{
if (Convert.ToString(p["Caption"])[0] == dl && (int)p["DriveType"] == 2)
return true;
}
return false;
}
Дело в том, что перечисленная выше функция прекрасно работает, когда она вызывается из любого контекста, отличного от fu WndProcnction.
Как я могу исправить это?