У меня есть надстройка Visual Studio, которая использует System.Timers.Timer
myTimer.
Каждые N секунд myTimer запускается и выполняет этот код:
foreach(Window window in DTE2.Windows)
{
TextDocument td = window.Document.Object("TextDocument") as TextDocument;
// do stuff with td...
}
Поскольку это вызывается из другого потока, я иногда получаю одну из следующих ошибок:
QI для IEnumVARIANT не удалось на неуправляемом сервере.
в EnvDTE.Windows.GetEnumerator ()
в строке foreach (окно окна в DTE2.Windows)Приложение вызвало интерфейс, который был упорядочен для другого потока. (Исключение из HRESULT: 0x8001010E (RPC_E_WRONG_THREAD))
в EnvDTE.Window.get_Document ()
в строке TextDocument td = window.Document.Object ("TextDocument") как TextDocument;
Как правильно получить доступ к этому перечислителю в другом потоке, если задействованы COM-объекты?
Какой-то маршаллинг потока COM?
Что-то еще?