InvalidCastException: RPC_E_CANTCALLOUT_ININPUTSYNCCALL - PullRequest
1 голос
/ 30 декабря 2008

Я создаю приложение на C #, которое имеет статический класс, который инициирует COM-класс и обрабатывает некоторые обработчики событий другого класса, который перехватывает клавиатуру. Когда я вызываю метод класса COM из обработчика события кнопки в моем окне WPF, метод работает без проблем, но когда я вызываю его в одном из обратных вызовов событий в моем статическом классе, он выдает следующее исключение:

Невозможно привести COM-объект типа 'BLAHBLAH' к типу интерфейса. 'BLAHBLAH. Эта операция завершилась неудачно, потому что QueryInterface вызывает COM-компонент для интерфейса с IID Ошибка {9DD6680B-3EDC-40DB-A771-E6FE4832E34A} из-за следующего ошибка: исходящий звонок не может быть сделан, так как приложение диспетчеризация синхронного входа. (Исключение из HRESULT: 0x8001010D (RPC_E_CANTCALLOUT_ININPUTSYNCCALL)).

Подскажите, пожалуйста, что означает это исключение и как его решить?

Ответы [ 2 ]

1 голос
/ 10 апреля 2015

Сверните ваш код в новую ветку:

Thread thread = new Thread(() =>
{
    ManagementObjectSearcher theSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");
    foreach (ManagementObject currentObject in theSearcher.Get())
    {
        Debug.WriteLine("Device present: " + currentObject);          
        ManagementObject theSerialNumberObjectQuery = new ManagementObject("Win32_PhysicalMedia.Tag='" + currentObject["DeviceID"] + "'");
        serial = theSerialNumberObjectQuery["SerialNumber"].ToString();
    }
});
thread.Start();
thread.Join(); //wait for the thread to finish
0 голосов
/ 21 января 2009

См. Этот КБ http://support.microsoft.com/kb/198996 Похоже, что это из-за потоков (не могут быть пользовательские темы)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...