Как я могу принудительно вызвать приведение из EnvDTE.Thread в System.Threading.Thread? - PullRequest
0 голосов
/ 08 июля 2011

В проекте расширения 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 ]

1 голос
/ 08 июля 2011

вы пытались сначала привести к объекту обратно?

0 голосов
/ 08 июля 2011

Ошибка компиляции, которую вы получаете - это немного красной сельди.

Debugger.CurrentProgram.Threads уже возвращает коллекцию EnvDTE.Thread объектов, поэтомуваш foreach потерпит неудачу при попытке привести их к System.Threading.Thread, поскольку между этими классами нет никакого отношения, кроме имени.

EnvDTE.Thread имеет свойство ID.Будет ли это делать то, что вы хотите, без необходимости конвертировать в System.Threading.Thread?

...