我有一个使用System.Timers.Timer
myTimer 的 Visual Studio 加载项。
每 N 秒 myTimer 触发并执行以下代码:
foreach(Window window in DTE2.Windows)
{
TextDocument td = window.Document.Object("TextDocument") as TextDocument;
// do stuff with td...
}
因为这是从另一个线程调用的,所以我有时会遇到以下错误之一:
IEnumVARIANT 的 QI 在非托管服务器上失败。
在 foreach 线上的 EnvDTE.Windows.GetEnumerator()
(DTE2.Windows 中的窗口窗口)应用程序调用了为不同线程编组的接口。(HRESULT 异常:0x8001010E (RPC_E_WRONG_THREAD))
在 EnvDTE.Window.get_Document()
行 TextDocument td = window.Document.Object("TextDocument") as TextDocument;
由于涉及 COM 对象,在另一个线程中访问此枚举器的正确方法是什么?
某种 COM 线程编组?
还有什么?