2010-01-19 1 views
0

저는 C#을 사용하여 WSP를 설치하고 셰어 포인트 서버에 배포하는 Windows 양식을 작성하고 있습니다. 문제는 내가 문제를 감지하여 응용 프로그램을 종료하거나 양식의 오른쪽 상단에있는 십자가를 누르면 양식이 닫히지 만 작업이 프로세스 목록에 남아 있다는 것입니다. 내 코드를 종료C# 응용 프로그램을 종료하면 메모리에 남아있게됩니다.

은 다음과 같습니다

this.close(); 
application.quit(); 

난 형태 사이에서 변경하는 방법은 다음과 같습니다

form2.show(); 
form1.hide(); 

내에서만 생각 지금까지 내가 아마도 이러한 것을하지 않는 몇 가지 배경 노동자를 사용하는 것입니다 같은 시간에 종료 되었습니까?

감사합니다.

+0

C#은 대/소문자를 구분합니다. 그것은 this.Close()'this.close()'등이 아닙니다. –

답변

3

백그라운드 스레드로 설정되지 않은 모든 스레드가 종료되면 프로세스가 종료됩니다.

BackgroundWorker는 내부적으로 대리자에서 BeginInvoke를 호출하고 코드가 ThreadPool에서 스레드로 실행되도록합니다. ThreadPool 스레드는 IsBackground를 true로 설정하므로 응용 프로그램이 중단되지 않아야합니다. BackgroundWorker가 문제를 일으키는 것은 아닙니다.

new Thread() 또는 그 유사 항목을 사용하여 수동으로 새 스레드를 만드는 코드에서이 스레드의 IsBackground 멤버를 true로 설정하지 않았을 가능성이 큽니다.

+0

불행하게도 백그라운드 스레드를 직접 사용하지 않았습니다. "디버깅 중지"를 눌러야 디버깅 할 때 발생하지 않습니다. 독립 실행 형, 창문이 모두 닫혀 있지만 프로세스가 여전히 실행! – Nath

+0

COM 구성 요소를 사용하거나 Office와의 통합을 수행합니까? Excel 또는 Word? 재생할 수있는 타사 구성 요소가 있습니까? –

1

디버거를 부착하는 것이 매우 쉽습니다 (문제가있는 시스템에 디버거가 없으면 Managed Stack Explorer을 얻을 수 있음) 프로세스를 중단하여 현재 실행중인 스레드를 확인할 수 있습니다. Visual Studio에서 스레드 창을보고 코드를 실행하는 창을 찾아야합니다. 그것을 두 번 클릭 한 다음 Call Stack 창에서 무엇이 들어 있는지 확인하십시오.