2014-03-27 3 views
0

시작시 내 응용 프로그램이 동시에 몇 개의 스레드를 시작할 수 있습니다. 이제 어떤 조건을 기반으로 다른 스레드의 상태에 관계없이 모든 스레드를 완전히 없애고 싶습니다.스레드에 관계없이 응용 프로그램을 완전히 종료하는 방법

Application.Current.ShutDown뿐만 아니라 App.Current.ShutDown()도 시도했지만 작동하지 않습니까?

+0

... "irregardless"는 단어가 아닙니다. 나 자신을 도울 수 없었다. 문제에 관해서는 코드를 보여줘야합니다.새로운'Thread's를 생성하는 가장 간단한 경우, 응용 프로그램의 수명을 공유하려면 IsBackground 속성을 true로 설정하십시오. –

답변

3

당신은 내가 그가 단단한 조언을 제공합니다 생각하는 당신은 (결과 및 Shutting down a multithreaded application) Killing all threads that opened by application을 볼 수 당신은 here

에서 원하는 코드로 0를 대체 할 수

Environment.Exit(0); 

을 시도 할 수 있습니다.

+0

할 수도 있습니다 (권장하지 않음). http://stackoverflow.com/questions/5901679/kill-process-tree-programatically-in-c-sharp?rq=1 –

+0

불리한 점이 있는지 확실하지 않습니다. 하지만 그것은 내 목표를 달성 –

+1

@ Mr.SuicideSheep 나는 그것이 덜 "깨끗한"것이라고 생각하지만 그건 내 의견이다. –

2

다른 스레드가 종료됩니다 백그라운드 스레드가있는 경우 (즉, 자동으로 중단 할 때 종료 유일한 전경 스레드에서 실행되는 WPF 응용 프로그램) :

MSDN에서 :

".. .background 스레드는 프로세스가 종료되는 것을 막지 않습니다. 프로세스에 속한 모든 전경 스레드가 종료되면 공용 언어 런타임이 프로세스를 종료합니다. 나머지 모든 백그라운드 스레드는 중지되고 완료되지 않습니다. "

Thread myThread = new Thread(); 
myThread.IsBackground = true; 

ThreadPool threads 배경 것들.

3

스레드는 백그라운드 스레드 또는 포 그라운드 스레드입니다. 백그라운드 스레드는 프로세스가 종료되는 것을 방지하지 않는다는 점을 제외하고는 전경 스레드와 동일합니다. 프로세스에 속한 모든 전경 스레드가 종료되면 공용 언어 런타임이 프로세스를 종료합니다. 나머지 모든 백그라운드 스레드는 중지되고 완료되지 않습니다. 당신은 실행중인 응용 프로그램을 죽일해야하는 경우, How to: Create and Terminate Threads (C# Programming Guide)

3

상태에 관계없이 당신이

Environment.Exit(0); // use -1 if you're exiting with an error, exiting with 0 is considered to have exited without errors. 

또는를 사용할 수 있습니다 :

또한이보기 스레드의 재산 IsBackground=true

var t= new Thread(); 
t.IsBackground = true; 

설정 정말로 망치를 사용하고 싶다면

Environment.FailFast() 

FailFast의 설명서 내용 : Windows 응용 프로그램 이벤트 로그에 메시지를 기록한 후 즉시 프로세스를 종료 한 다음 Microsoft에 오류보고에 메시지를 포함시킵니다.

Exit 메서드 대신 FailFast 메서드를 사용하여 응용 프로그램의 상태가 복구 할 수 없을 정도로 손상된 경우 응용 프로그램을 종료하고 응용 프로그램의 try/finally 블록 및 finalizer를 실행하면 프로그램 리소스가 손상됩니다.

관련 문제