Что означает код HRESULT 0x8000000C (E_CHANGED_STATE)?

 
Также может означать:
КонстантаТипОС
STATUS_GUID_SUBSTITUTION_MADENTSTATUSWindows
Предыдущий Следующий
E_BOUNDS E_ILLEGAL_STATE_CHANGE

E_CHANGED_STATE

Что означает E_CHANGED_STATE

E_CHANGED_STATE (0x8000000C) — Параллельная или чередующаяся операция изменила состояние объекта и сделала текущую операцию недействительной.

Контекст результата 0x8000000C — подсистема «COM/WinRT» и область «контракт вызываемого interface, аргументы и state объекта». Условие «параллельная или чередующаяся операция изменила состояние объекта и сделала текущую операцию недействительной» указывает на тему «changed, состояние», а не на общий отказ всего компонента.

Что проверить и как подтвердить исправление

Сначала сопоставьте первый отказ с фактическими параметрами операции. Для 0x8000000C в условии «параллельная или чередующаяся операция изменила состояние объекта и сделала текущую операцию недействительной» восстановите порядок переходов объекта и найдите пропущенный шаг; численно корректный handle может принадлежать предыдущему поколению.

Перед повтором 0x8000000C зафиксируйте IID и method, thread/apartment, argument values, object state и исходный HRESULT; отдельно запишите HRESULT, ID, IDs, IAgileObject. Различия по теме «changed, состояние» для 0x8000000C покажут, изменился ли первый неуспешный этап.

Для 0x8000000C применяйте исправление на границе первого отказа: приведите аргументы и жизненный цикл объекта к контракту метода; неизменённый вызов после contract failure повторять не следует. Сообщение «параллельная или чередующаяся операция изменила состояние объекта и сделала текущую операцию недействительной» при 0x8000000C не следует подавлять общей обработкой исключения.

Повторите операцию в том же окружении и сравните первый отличающийся вызов; для результата 0x8000000C это надёжнее единичного успеха на других данных.

Документация для результата 0x8000000C: C++/WinRT error handling · concurrency and asynchronous operations · WinMD files.


Нужно найти другой код? Найти другой код состояния или ошибки.