Microsoft.Win32.SystemEvents.PowerModeChanged
을 구독하는 Windows 양식과 Suspend
에서 양식의 Close()
메서드를 실행합니다. Resume
에는 초기로드시와 마찬가지로 Run()
기능이 실행됩니다. 문제는 컴퓨터가 절전 모드에서 깨어 났을 때 PowerModeChanged 이벤트가 ".Net SystemEvents"라는 작업자 스레드에서 트리거되고 Run()
이 호출되면 주 스레드 대신이 작업자 스레드에서 양식을 다시 생성한다는 것입니다.잠자기 (일시 중단) 및 재개 Windows 양식은 주 스레드 대신 작업자 스레드에서 프로그램을 시작합니다.
이 양식은 다른 개발자로부터 물려받은 프로젝트이며 Windows 프로그래밍에 익숙하지 않습니다. 폼을 닫고 웨이크 또는 주 스레드에 생성을 강제하는 방법으로 다시 작성하는 것보다 절전/깨우기 프로세스를 처리하는 더 좋은 방법이 있는지 궁금합니다. 참고 : 코드를 제거하고 컴퓨터가 잠자기 (일시 중단)되었을 때 아무 것도하지 않고 잠자기 (재개) 할 때 아무 것도하지 않으면 프로그램이 계속 정상적으로 작동합니다 (주 스레드에서 실행). 어떤 도움을 주시면 감사하겠습니다. 모두에게 감사드립니다.
왜 처음부터 그렇게 했습니까? – SLaks
솔직히, 나는 잘 모르겠다. 원래 개발자가 효율적으로 수면을 처리하고 싶다고 생각합니까? 앞에서 설명한 것처럼 Windows 양식을 사용하지 않았기 때문에 양식을 일시 중단/다시 시작하는 것이 가장 좋습니다. – madeFromCode
이 양식의 원본 개발자에게 질문했습니다. 양식이 사용중인 SDK로 인해 프로그램이 중단 될 것이라고 그는 말합니다. 이 양식은 VOIP 클라이언트이고 SDK는 VOIP 서버에 연결하기 때문입니다. 컴퓨터가 일시 중지되었다가 다시 시작되면 SDK는 VOIP 서버와의 연결이 끊어지며 충돌합니다. – madeFromCode