在一个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对象两次。 –
@Erwin它看起来像一个操作系统线程映射到托管线程[是不可能](http://stackoverflow.com/questions/1749541/getting-from-processthread-to-a-managed-thread)。 –
谢谢安娜,的确看起来不可能。使用Process.GetCurrentProcess()进行映射甚至是不可能的。线程因为没有匹配的ID。这次我运气不佳。 –