在搜索了 Stack Overflow 问题并进行了一些谷歌搜索后,我仍然没有得到它。
我知道您可以使用“Thread.isAlive()”方法检查单个线程是否正在运行,但我想检查特定的“FooThread”是否仍在当前进程的所有正在运行的线程之间运行,如果没有,调用启动它的方法。
//somewhere in the code, on another Project/DLL inside solution
private void FooThreadCaller()
{
Action act = () => fooFunction();
Thread t = new Thread(new ThreadStart(act));
t.Name = "FooThread";
t.Start();
}
//...
Process proc = System.Diagnostics.Process.GetCurrentProcess();
ProcessThreadCollection threads = proc.Threads;
bool ThreadExists = false
foreach (ProcessThread item in threads)
{
// if item.Name == "FooThread", then ThreadExists = true...
// so, if !ThreadExists then call FooThreadCaller() and so on.
}
//...
正如其他答案中提到的,ProcessThread 和 Thread 对象是不同的。您的 dll 正在创建它自己的 Thread 对象,但随后它会丢弃对该对象的引用。然后稍后您将查询操作系统(通过 System.Diagnostics)该线程,并期望获得与线程创建者之前相同的访问级别。
相反,您应该在创建 Thread 对象时保存对它们的引用。也许您的 dll 可以实现一个公共静态集合对象,然后您可以在创建线程对象时将其添加到其中。
然后,在 dll 之外,您可以循环遍历该集合并检查每个线程的名称和状态。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)