0

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

4

2 回答 2

1

您是否尝试过先转换回一个对象?

threads.Add((EnvDTE.Thread)(object)thread, thread);
于 2011-07-07T23:21:54.517 回答
0

你得到的编译错误有点像红鲱鱼。

Debugger.CurrentProgram.Threads已经返回了一个EnvDTE.Thread对象集合,因此foreach在尝试将它们转换为时将失败,System.Threading.Thread因为这些类之间除了名称之外没有任何关系。

EnvDTE.Thread有财产ID。这会做你想要的,而不需要转换为 aSystem.Threading.Thread吗?

于 2011-07-07T23:26:57.687 回答