小编Aar*_*ron的帖子

从外部进程中解决C#中的问题

我有这个简单的代码:

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

private void RunOnBackground()
{
   Trace.WriteLine("hi");
   ...
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,当运行此代码(来自第三方进程)时,线程并没有真正运行.在进程资源管理器和VS调试器中,我看到线程已创建且其状态为"正在运行".

主线程的公寓是STA,我在内部线程上尝试了STA和MTA.

当我Run()在最后添加到方法时invokerThread.Join();,线程确实运行.但话说回来并没有真正帮助.

我错过了什么?

编辑:以下是有关代码托管的更多信息 -

Run() 方法是通过COM interop从一个进程调用的,该进程也是托管可执行程序集(使用COM互操作的原因是因为系统中的所有其他组件都是本机的).

该方法RunOnBackground()在跟踪之后包括一些代码,并且通常其执行持续10-20秒,包括启动另一个进程并等待其终止.此外,我在代码中还有一些其他区域,我将一些调试信息写入Trace.在调试代码时,Run()像往常一样运行并且在invokerThread.Start();invokerThread的状态为"Running"之后(尽管RunOnBackground()方法中的断点不会停止).

当我添加invokerThread.Join()在结束Run()方法调试器去RunOnBackground() Join().

.net c# multithreading mta sta

5
推荐指数
1
解决办法
1291
查看次数

标签 统计

.net ×1

c# ×1

mta ×1

multithreading ×1

sta ×1