У меня есть этот простой код:
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 ()
.