Проблемы с потоками в C # из внешнего процесса

У меня есть этот простой код:

public void Run()
{
   var invokerThread = new Thread(new ThreadStart(RunOnBackground));
   invokerThread.Start();
}

private void RunOnBackground()
{
   Trace.WriteLine("hi");
   ...
}

К сожалению, при запуске этого кода (из стороннего процесса) поток на самом деле не запускается. Либо в проводнике процессов, либо в отладчике VS я вижу, что поток создан и его состояние - «Выполняется».

Апартамент основного потока - это STA, и я пробовал использовать STA и MTA во внутреннем потоке.

Когда я добавьте к методу Run () в конце invokerThread.Join (); , тогда поток будет запущен. Но опять же, это не совсем помогает.

Что мне не хватает?

Изменить: Вот еще некоторая информация о размещении кода -

Run () метод вызывается через COM-взаимодействие из процесс, который также является управляемой исполняемой сборкой (причина использования COM-взаимодействия в том, что все остальные компоненты в системе являются собственными).

Метод RunOnBackground () включает в себя еще немного кода после трассировки, и обычно его выполнение длится от 10 до 20 секунд, включая запуск другого процесса и ожидание его завершения. Также у меня есть другие области кода, где я записываю некоторую отладочную информацию в Trace. Во время отладки кода Run () запускается как обычно и после invokerThread.Start (); invokerThread находится в состоянии «Выполняется» (хотя точки останова внутри RunOnBackground () не останавливается).

Когда я добавляю invokerThread.Join () в конец метода Run () , отладчик переходит к RunOnBackground () после Join () .

5
задан Aaron 13 December 2010 в 08:57
поделиться