2012-05-15 10 views
2

Microsoft.Win32.SystemEvents.PowerModeChanged을 구독하는 Windows 양식과 Suspend에서 양식의 Close() 메서드를 실행합니다. Resume에는 초기로드시와 마찬가지로 Run() 기능이 실행됩니다. 문제는 컴퓨터가 절전 모드에서 깨어 났을 때 PowerModeChanged 이벤트가 ".Net SystemEvents"라는 작업자 스레드에서 트리거되고 Run()이 호출되면 주 스레드 대신이 작업자 스레드에서 양식을 다시 생성한다는 것입니다.잠자기 (일시 중단) 및 재개 Windows 양식은 주 스레드 대신 작업자 스레드에서 프로그램을 시작합니다.

이 양식은 다른 개발자로부터 물려받은 프로젝트이며 Windows 프로그래밍에 익숙하지 않습니다. 폼을 닫고 웨이크 또는 주 스레드에 생성을 강제하는 방법으로 다시 작성하는 것보다 절전/깨우기 프로세스를 처리하는 더 좋은 방법이 있는지 궁금합니다. 참고 : 코드를 제거하고 컴퓨터가 잠자기 (일시 중단)되었을 때 아무 것도하지 않고 잠자기 (재개) 할 때 아무 것도하지 않으면 프로그램이 계속 정상적으로 작동합니다 (주 스레드에서 실행). 어떤 도움을 주시면 감사하겠습니다. 모두에게 감사드립니다.

+0

왜 처음부터 그렇게 했습니까? – SLaks

+0

솔직히, 나는 잘 모르겠다. 원래 개발자가 효율적으로 수면을 처리하고 싶다고 생각합니까? 앞에서 설명한 것처럼 Windows 양식을 사용하지 않았기 때문에 양식을 일시 중단/다시 시작하는 것이 가장 좋습니다. – madeFromCode

+0

이 양식의 원본 개발자에게 질문했습니다. 양식이 사용중인 SDK로 인해 프로그램이 중단 될 것이라고 그는 말합니다. 이 양식은 VOIP 클라이언트이고 SDK는 VOIP 서버에 연결하기 때문입니다. 컴퓨터가 일시 중지되었다가 다시 시작되면 SDK는 VOIP 서버와의 연결이 끊어지며 충돌합니다. – madeFromCode

답변

4

정적 필드에서 UI 스레드 SynchronizationContext를 캡처하고 UI 필드로 돌아가려면 Post()을 캡처하십시오.

+0

그것이 효과가 있는지 궁금합니다. 좋은 조언! – IAbstract

+0

그게 효과가! 고맙습니다! – madeFromCode

+0

@madeFromCode 환영합니다. [빈 체크를 클릭하여이 대답을 수락해야합니다.] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work). – SLaks