저는 VS2010을 가지고 있으며 Windows 양식 응용 프로그램에서 작업하고 있습니다.vb.net에서 waitHandle을 사용하는 방법
그래서 (사용자 입력에 따라) 동적으로 생성 된 스레드가 있습니다.이 스레드의 처리는 잠시 (극단적 인 경우에는 며칠) 걸릴 수 있습니다. 그래서 폼에 버튼을 놓았고 스레드를 '일시 중지'또는 '일시 중단'할 수 있기를 원합니다. 나는 .suspend 메서드를 찾았으며 대체되었습니다. (사용하려고 시도했지만 가끔 실패합니다 - UI 충돌로 인해)이 작업을 수행하는 새로운 방법은 'waithandle'입니다. 나는 이것에 대한 문서를 읽고 그것을 사용하는 방법을 해결할 수 없습니다.
이 각 스레드의 기본 구조는 다음과 같습니다
Do
'time consuming operations
loop 'a number of times
그런 다음 별도의 버튼에서 나는 일시 정지 코드를 삽입하고 싶습니다. 모든 것이 빠르다는 것이 중요하지는 않습니다. 루프를 통해 다음 실행을 일시 중지하는 것이 좋습니다 (각 실행은 아주 빠르며, 수 백 번 반복합니다). 루프 시작 부분에 waithandle 검사를해야한다고 가정하고 있지만 이것을 구현하는 방법을 실제로 알지 못합니다.
Dim waitHandles As System.Threading.EventWaitHandle = New System.Threading.AutoResetEvent(True)
모든 스레드 (기본 UI 스레드 제외) 한 번에 일시 중지 할 수 있습니다 그래서 나는 그것이 내가 하나의 대기 핸들을 필요로하지만, 이것에 대해 확실하지 않다 의미한다고 생각이 내 WaitHandle이 희미 코드입니다.
어쨌든 누구나 코드가 do 루프에 들어가고 일시 중지 버튼으로 들어가면 다른 모든 것들을 처리 할 수 있다고 생각하면됩니다. :)
많은 감사!
프레이저
댓글에서:
감사합니다! 나는 그것을 작동 시켰어. 여기 내도 구현의 :
Dim mre As New System.Threading.ManualResetEvent(True)
(그건 그냥 '공용 클래스 양식 1'아래에있는 코드 (상단에 있어요) 다음에 그것을 스레딩은이 : 일시 정지 버튼에 마지막으로
mre.WaitOne(),
/일시 중지가 해제 스레드가 있습니다
mre.Reset() 'to resume the threads and, mre.Set() 'to pause the threads
감사를 쉽게해야합니다 왜냐하면 실제 코드 '! 나는 그것을 작동 시켰어. 여기 내 implimentation : Dim mre As New System.Threading.ManualResetEvent (True) (코드 'public class form 1'바로 아래) 스레딩에서 다음과 같습니다. mre.mre.Reset() (사람이 편집 할 수 있다면이 그것을 만드는 : 스레드를 일시 정지 '), mre.Set을 (스레드를 재개하는'WaitOne()는 마지막 일시 정지 버튼에 /는이 스레드를 일시 중지가 해제 좀 더 깔끔하고, 난 그냥 방법을 모르는이 다른 사람에게 도움이 될 것 같아요!) – FraserOfSmeg