나는 Windows Form과 비 결정적 방식으로 재귀 적으로 실행되는 두 개의 간단한 메서드가있는 클래스가 있습니다. 즉, 어떤 재귀 호출이 호출되는지, 둘 다 호출 될 수 있는지 여부를 알 수 없음을 의미합니다 ... 이제 해당 재귀 중 몇 가지 점이 있습니다. 실행을 일시 중지하고 사용자가 "다음 단계"버튼을 클릭하기를 기다리고 싶습니다. 버튼을 누른 후에 만 재귀 함수가 계속됩니다. 클래스는 별도의 스레드에서 실행되므로 UI를 차단하지 않습니다.배경 스레드를 일시 중지 한 다음 단추를 클릭 할 때 계속 진행 하시겠습니까?
일시 중지 중에 Form은 클래스에서 값을 검색하여 목록 상자에 표시합니다. 그런 다음 버튼을 누르면 재귀는 다음 일시 중지()까지 계속됩니다. 사용자가 재귀 단계에서 어떤 일이 일어나는지를 단계별로 볼 수 있도록하려면 이렇게해야합니다. 또한 어떤 부작용없이 재귀 메서드 (심지어 여러 번)에 Pause()를 넣을 수 있어야합니다. ...
내 마음에 오는 유일한 방법은 Pause() 메서드를 호출하는 것입니다. 어떤 루프가 잠긴 플래그를 확인한 다음 잠시 동안 잠자기 (버튼에서 플래그를 설정)하지만 Windows Forms (UI 잠금)에서 Thread.Sleep()에 대한 몇 가지 나쁜 경험이 있었기 때문에 다른 옵션을보고 있습니다. .
이 작업을 수행 할 수있는 명확한 방법이 있습니까?
사용자가 잠시 멈추지 않고 기능 자체가 일시 중지되어 약간 수정되었습니다. 사용자는 단계 만 수행합니다. 하지만 Reset()과 WaitOne()을 일시 중지()에 놓은 다음 버튼을 클릭하면 Set()가됩니다. 의도적으로 작동합니다. 내가이 수업을 결코 알아 채지 못한 것은 재밌다. –
이것이 바로 AutoResetEvent의 작동 방식입니다. 스레드가 스레드에서 성공적으로 대기하면 자동으로 재설정됩니다. –
예, 내 시나리오에서 AutoResetEvent도 작동하며 실제로는 짧은 코드를 한 줄 씩 작성합니다. 그래서 이제는 Pause()에서 WaitOne()을 호출 할 수 있고 나머지 코드는 변경되지 않습니다. –