如何强制从EnvDTE.Thread转换为System.Threading.Thread?

时间:2011-07-07 22:55:33

标签: .net multithreading casting envdte

在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。

2 个答案:

答案 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吗?