2011-01-23 2 views
58

무한 루프를 거쳐 데이터를 처리하는 양식이 있습니다. 양식을 "닫는"버튼을 클릭하면 양식이 닫혀 있어도 계속 처리됩니다. 양식을 완전히 끝내고 루프 문을 종료 한 다음 새 양식을 엽니 다. 여기 VB.NET - 양식 루프 및 양식 끝내기

내가 양식을

frmMain.Close() 
frmMain.Dispose() 

주를 닫 사용하고있는 코드입니다 : 나는 그것이 단순한 VB.NET 응용 프로그램의 스레드를 사용하고 있지 않다. 나는 주요 시작 양식을 닫지 않을 것이다.

답변

82

이 작업을 수행하는 "올바른"방법은 배경 작업자 스레드를 사용하는 것입니다. 그러나 이것은 백그라운드 작업자 스레드가 필요 없이도 작동합니다.

양식 클래스에서 변수를 선언하십시오.

Private keepLoopAlive As Boolean 

은 다음으로 당신의 처리 루프를 작성 뭔가 같은 :

keepLoopAlive = True 

Do While keepLoopAlive 

    (your code that loops here) 

    DoEvents 

Loop 

그런 다음 닫기 이벤트에서 수행이 루프가 가져 첫 번째 기회를 종료하게됩니다

keepLoopAlive = False 
Me.Close() 

, 양식을 닫아야합니다.

메모이 코드는 메모리가 아닌 IDE에서 작성되었으므로 오타가있을 수 있습니다.

+1

고마워요! 이것을 내 프로그램에 구현하는 것을 끝내 었으며 훌륭하게 작동합니다! 원래 루프를 빠져 나오지 않고 갑자기 폼 프로세스를 끝낼 수 있는지 물어 보았습니다. 그러나 이것이 불가능한 것처럼 들립니다. – Phil

+1

루프를 종료하지 않고 프로세스를 종료 할 수 있습니다. .NET에서 적어도 세 가지 쉬운 방법이 있습니다. 스레드에서 "IsBackground"를 "true"로 설정하고 모든 포 그라운드 스레드를 종료하거나 Environment.FailFast() 또는 Environment.Exit()를 호출하십시오. – codekaizen

+43

모든 Google 직원에게 : 올바른 방법은 백그라운드 작업자를 사용하는 것입니다. –

11

나는 .NET 개발자가 아니므로 유효하지 않을 수 있습니다. 그러나 무한 루프를 수행하는 경우 루프가 여전히 일종의 부울 값으로 유효하다는 것을 확인할 때마다 검사 할 것입니다. 실패, 루프에서 빠져 나옵니다.

폼을 닫을 때 부울 값을 false로 설정하면이 값이 떨어지고 루프를 기다리고 재시작하는 외부 루프가 있거나 다른 시간에 전체 함수를 다시 시작할 수 있습니다.