나는 천천히 Sierpinski 삼각형을 그려주는 C#의 스크린 세이버를 작성하고 있습니다. 재귀 함수 내에서 Thread.Sleep
을 사용하여 드로잉 속도를 늦 춥니 다. 하지만, 사용자가 마우스를 움직이거나 키를 누르는 등의 방법으로 종료 할 수 있어야합니다. 양식의 Paint
이벤트 처리기 내에서 그리기 기능이 호출되므로 마우스 및 키보드 이벤트는 전체 삼각형이 처리 된 후에 만 처리됩니다. 그려서 꽤 오랜 시간이 걸릴 수 있습니다. 어떻게 재귀 함수가 실행되는 동안 이벤트를 처리하도록 폼을 강제로 할 수 있습니까? (페인트 이벤트 등을 호출하는 이벤트 핸들링을 강제하는 드로잉 함수를 호출하는 페인트 이벤트를 호출하여 발생하는 무한 루프를 피하는 방법)재귀 함수 내부에서 이벤트 처리를 강제 수행하는 방법?
3
A
답변
4
글쎄 너 수 있습니다 사용 Application.DoEvents
-하지만 나는 그것을 권하고 싶지 않아요. 특히 Paint
이벤트에서 재진입 문제로 쉽게 끝날 수 있습니다.
Paint
이벤트를 처리하는 경우 실제로 UI 스레드에서 수행해야하는 모든 작업이 들리는 것 같습니다. 맞습니까?
대신 Paint
이벤트 처리기를 사용하는 대신 Bitmap
을 만들고 그 위에 그릴 수 있습니다. 백그라운드 스레드에서이 작업을 수행 할 수 있습니다. 주기적으로 새 이미지를 작성하고, 지금까지 그려진 이미지를 복사 한 다음 다음 레이어 (또는 그 이상)를 그린 다음 UI 스레드에서 마샬링하여 UI에서 이미지를 사용할 수 있습니다. 이렇게하면 이벤트 핸들링을 위해 기본 UI 스레드를 자유롭게 유지할 수 있습니다. Paint
이벤트를 처리 할 필요가 없습니다. "지금까지의 이미지"를 표시하는 데 사용하는 PictureBox
만 있으면됩니다. 메모리 문제를 피하기 위해 오래된 비트 맵을 처리하는 것을 잊어 버리지 마십시오.
2
언제든지 계산/드로잉 할 수있는 backbuffer 비트 맵을 사용할 수 있습니다 Paint
이벤트에 표시하면됩니다. 계산은 별도의 스레드에서 수행 할 수 있습니다.
관련 문제
- 1. 순차 처리를 수행하는 방법
- 2. 네이티브 C 함수 내부에서 이벤트 발생?
- 3. Android : 일부 유령처럼 유휴 처리를 수행하는 방법?
- 4. 이벤트 처리를 위임자를 사용하여
- 5. JQuery 재귀 함수?
- 6. MVC 작업에 특정 작업을 강제 수행하는 방법
- 7. 재귀 함수
- 8. 재귀 함수
- 9. JQuery 각 함수는 연속 작업을 강제 수행하는 방법
- 10. Prolog : 재귀 함수 재정의
- 11. 재귀 함수 완료시기 결정
- 12. 함수 내부에서 exec 실행
- 13. 함수 내부에서 객체 호출
- 14. 함수 내부에서 ddply 사용하기
- 15. 함수 내부에서 SQL 호출하기
- 16. 이미지 처리를 OpenGL에 적용하는 방법?
- 17. Drupal은 Java에서 이벤트 처리를 구현합니까?
- 18. dojox.gfx에서 이벤트 처리를 지원하는 브라우저
- 19. 함수 이름을 파이썬에서 그 함수 내부에서 문자열로 출력하는 방법
- 20. 더 이상의 이벤트 처리를 중단하는 방법은 무엇입니까
- 21. 이벤트 중 강제 실행 메서드
- 22. jQuery 재귀 함수
- 23. 재귀 문자열 역방향 함수
- 24. 익명 함수/재귀 C#
- 25. 자바 스크립트의 재귀 함수
- 26. 재귀 함수 재진입
- 27. 표준 ML 재귀 함수
- 28. JavaScript에서 호출하는 재귀 함수
- 29. haskell 재귀 함수
- 30. 익명 재귀 PHP 함수
근로자 접근법에 +1; 나는 DoEvents를 사용하지 말라고 두 번째로 조언했다. –