cez*_*ann 10 .net c# multithreading process
在搜索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.
}
//...
Run Code Online (Sandbox Code Playgroud)
由于ProcessThread类没有"Name"属性(如System.Threading.Thread那样)但只有ID,而我只知道线程名称("FooThread")而不是ID,我怎么能检查"FooThread"正在运行/活着?
先感谢您
正如其他答案中所提到的,ProcessThread和Thread对象是不同的.你的dll正在创建它自己的Thread对象,但是它抛弃了它对该对象的引用.然后,您将查询该线程的操作系统(通过System.Diagnostics),并期望获得与线程创建者相同的访问级别.
相反,您应该在创建Thread对象时保存对它们的引用.也许你的dll可以实现一个公共静态集合对象,然后你可以在创建它们时添加你的线程对象.
然后在你的dll之外你可以遍历集合并检查每个线程的名称和状态.
| 归档时间: |
|
| 查看次数: |
10401 次 |
| 最近记录: |