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 클래스에는 System.Threading.Thread와 같은 "Name"속성이 없지만 ID 만 있고 ID가 아닌 스레드 이름 ( "FooThread") 만 알고 있기 때문에 "FooThread"인지 어떻게 확인할 수 있습니까? 실행 중 / 살아 있습니까?
미리 감사드립니다
다른 답변에서 언급했듯이 ProcessThread 및 Thread 개체는 다릅니다. 귀하의 dll은 자체 Thread 객체를 생성하지만 해당 객체에 대한 참조를 버립니다. 그런 다음 나중에 해당 스레드에 대해 OS (System.Diagnostics를 통해)를 쿼리하고 이전에 스레드 작성자와 동일한 수준의 액세스를 기대합니다.
대신 스레드 개체를 만들 때 참조를 저장해야합니다. 아마도 dll이 공용 정적 컬렉션 개체를 구현 한 다음 스레드 개체를 만들 때 추가 할 수 있습니다.
그런 다음 dll 외부에서 컬렉션을 반복하고 각 스레드의 이름과 상태를 확인할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다