VS拡張プロジェクトでは、プロセススレッドのマッピングを作成し、EnvDTE.Thread(FreezeメソッドとThawメソッドにアクセスする)とSystem.Threading.Thread(ManagedThreadIdプロパティにアクセスする)の両方にキャストしようとしています。EnvDTE.ThreadからSystem.Threading.Threadへのキャストを強制するにはどうすればいいですか?
理想的には以下のようにする必要がありますが、キャストはSystem.Threading.ThreadからEnvDTE.Threadにキャストできないと言ってコンパイルしません。
var threads = new Dictionary<EnvDTE.Thread, System.Threading.Thread>();
foreach (System.Threading.Thread thread in this.dte.Debugger.CurrentProgram.Threads) {
threads.Add((EnvDTE.Thread)thread, thread);
}
どのように私は(私はここで何かが欠けていなければ)、それは例外をスローしないであろうことを知って、キャストを強制することができますか?
編集:InvalidCastExceptionをスローします。
ああ、IDプロパティはManagedThreadIdではありませんが、これはSystem.Threading.Threadから逃した唯一の情報です。 EnvDTE.ThreadまたはSystem.Threading.Threadへのキャストは、両方ともループ変数宣言で実行されていれば動作します。 ここでは、CurrentProgram.Threadsオブジェクトを2回繰り返し処理することを避けようとしています。 –
@Erwin OSスレッドを管理対象スレッドにマッピングするように見える[不可能](http://stackoverflow.com/questions/1749541/getting-from-processthread-to-a-managed-thread) –
ありがとう、アンナ、確かに不可能と思われます。 Process.GetCurrentProcess()でマッピングを行うことも不可能です。一致するIDがないためスレッドです。私はこの時間のために不運です。 –