2012-08-27 4 views
0

vb.net 응용 프로그램을 만들고 frmScan이라는 Windows 폼 하나를 추가합니다. 두 개의 텍스트 상자와 두 개의 레이블을 넣었습니다. 그런 다음 위임 이벤트가있는 스레드를 씁니다.Vb.net의 스레딩 문제

Private Delegate Sub DoInitializedDelegate() 

Public motdet As New Thread(AddressOf MotionDetection) 

Private Sub MotionDetection() 
'Do motion detection Work 
'It is never ending Loop until form unload. 
End Sub 

그런 다음 양식로드 이벤트에서 시작합니다.

Private Sub frmScan_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
motdet.Start()  
End Sub 

그래서 내 양식을로드 할 때 내 문제가 시작되었습니다. 양식을 볼 수는 있지만 무언가를 적재하는 것과 같습니다. 내 동작 감지 스레드가 폼이 언로드 될 때까지 루프를 종료하지 않는다고 생각했습니다. 위의 두 텍스트 상자 안에 아무 것도 입력 할 수 없습니다. 어떻게해야합니까?

+1

스레드 대신 BackgroundWorker를 사용해 보셨습니까? 과거에는 양식 모델에 좀 더 쉽게 통합되는 것으로 나타났습니다. – Adrian

+0

이 루프에서 'Invoke'를 계속 호출합니까? 하지마. – Ryan

+0

무한 루프가 UI 응답을 기다리지 않아도된다면. ThreadPriority 스레드를 줄이고 @Adrian이 제안한대로 백그라운드 작업자를 사용하면 가치가 매우 높습니다. – sarepta

답변

1

장기 실행 스레드를 호출하기 전에 Application.DoEvents()을 사용하십시오.

여기에 예를 참조하십시오. http://msdn.microsoft.com/en-us/library/aa446540.aspx

+0

아무 것도하지 않습니다. (미안 설명이 아니라면 어째서'Dim x = 5 + 5'가 어딘가에서 해결되지 않는지 설명하려고하는 것과 같습니다.) – Ryan