Nach der Suche auf Stack Overflow Fragen und etwas googeln, bekomme ich es immer noch nicht.Nennen Sie Thread nach Name von ProcessThreadCollection
Ich bin mir bewusst, dass Sie überprüfen können, ob ein einzelner Thread mit "Thread.isAlive()" -Methode ausgeführt wird, aber ich möchte überprüfen, ob ein bestimmter "FooThread" noch zwischen allen laufenden Threads des aktuellen Prozesses läuft, und falls nicht, rufen Sie die Methode auf, die es startet.
//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.
}
//...
Da die Process Klasse nicht über eine Eigenschaft "Name" (wie System.Threading.Thread tut), sondern nur ID, und ich kenne nur den Thread-Namen ("FooThread ") nicht die ID, wie kann ich prüfen ob" FooThread "läuft/lebt?
Vielen Dank im Voraus
Selbst wenn das möglich wäre, wäre das keine gute Idee. Wenn der Thread gerade dabei wäre, auszusteigen, würdest du ihn als noch laufend wahrnehmen. Dies ist von Natur aus rassig. Verfolgen Sie diese Informationen selbst. Wenn FooThread herunterfährt, mach es nicht. Wenn es beginnt, notieren Sie sich. – usr
Sie tun etwas sehr, sehr falsch. Jeder Test "ist ein Thread, der noch läuft" ist nutzlos, er läuft möglicherweise eine Nanosekunde später nicht. Gut, dass es nicht funktioniert. –
Das sind großartige Kommentare, aber es lohnt sich auch darauf hinzuweisen, dass das OP tatsächlich überprüft, ob der Thread * nicht * läuft. – Slider345