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)) TextDocument td = window.Document.Object("TextDocument") as TextDocument; 行
の EnvDTE.Window.get_Document()で。
COM オブジェクトが関係しているため、別のスレッドでこの列挙子にアクセスする適切な方法は何ですか?
ある種の COM スレッド マーシャリングですか?
他の何か?