在VS扩展项目中,我正在尝试创建进程线程的映射,同时强制转换为EnvDTE.Thread(用于访问Freeze和Thaw方法)和System.Threading.Thread(用于访问ManagedThreadId属性)
理想情况下应该如下,但是强制转换不会编译,说它无法从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。
答案 0 :(得分:1)
您是否尝试过首先回到对象?
threads.Add((EnvDTE.Thread)(object)thread, thread);
答案 1 :(得分:0)
你得到的编译错误有点像红色鲱鱼。
Debugger.CurrentProgram.Threads
已经返回了EnvDTE.Thread
个对象的集合,因此在尝试将它们转换为foreach
时,您的System.Threading.Thread
将会失败,因为这些类之间没有任何关系名。
EnvDTE.Thread
具有ID
属性。这会做你想要的而不需要转换为System.Threading.Thread
吗?