我有这个简单的代码:
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();
调用者线程的状态为“正在运行”之后(尽管RunOnBackground()
方法内的断点不会停止)。
当我在方法invokerThread.Join()
的末尾添加时,调试Run()
器会RunOnBackground()
在Join()
.