전화가 걸리거나 수신 될 때 브라우저 창 (ExtendedWebBrowser)을 여는 VOIP 클라이언트 (창 형식)에서 작업하고 있습니다. 일반적으로 그것을 잘 작동하지만 컴퓨터가 절전 모드로 전환 한 후 깨어 경우 프로그램은 다음과 같은 오류와 충돌합니다 : 내가 설정 스레드가 thread.SetApartmentState(ApartmentState.STA)
와 코드에서 시작 시도스레드가 단일 스레드 아파트에 있기 때문에 ActiveX 컨트롤을 인스턴스화 할 수 없습니다. 잠자기에서 PC를 깨운 후 발생
"System.Threading.ThreadStateException crossed a native/managed boundary
Message=ActiveX control '8856f961-340a-11d0-a96b-00c04fd705a2' cannot be instantiated because the current thread is not in a single-threaded apartment."
하지만이 같은 결과를 얻고있다 . 또한 main()
함수 앞에 [STAThread]
이 있습니다. 이제 컴퓨터가 잠자기 상태 일 때 제대로 종료되지 않는 스레드와 더 관련이 있는지 궁금합니다. 그러나 확실하지 않습니다. 내 배경은 C++과 DirectX입니다.이 도구는 제가 처음 작업 한 Windows 양식이므로 도움을 받으실 수 있습니다.
추가 정보 : 주 스레드가 아닌 작업자 스레드에서 프로그램을 다시 시작한 후이를 발견 한 후에이 문제를 해결할 수있었습니다. 자세한 내용은 여기를 참조하십시오. Sleep(suspend) and Resuming windows form starts program on worker thread instead of main thread
이것은 일반적으로 프로그램 시작 문제로 인해 발생합니다. 사용자가 만든 모든 스플래시 스크린을 제거하고 생성 된 맨 처음 윈도우가 메인 스레드에서 초기화되는지 확인하십시오. 이렇게하면 SystemEvents 클래스가 제대로 초기화됩니다. –
안녕 한스, 답장을 보내 주셔서 감사합니다. 생성 된 첫 번째 창은 주 스레드에서 초기화됩니다. 그러나 첫 번째/주 양식은 오류가 아닙니다. 기본 폼에서 열리는 브라우저 창은 오류를 발생시키는 창입니다. 또한 컴퓨터가 절전 모드로 들어간 후 깨어 난 후에 만 오류가 발생한다는 점에 유의해야합니다. OnPowerChange는 폼이 닫히고 초기로드에서와 같이 폼이 다시 실행되도록 다시 시작합니다. – madeFromCode
글쎄, 불분명하지만 브라우저가 확실히 이런 종류의 오류를 생성합니다. 질문 제목이 틀린 점에 유의하십시오. ** STA 스레드에서 ** 생성되지 않기 때문에 불평합니다. OnPowerChange가 무엇 일지는 모르겠지만 사용하는 이벤트가 잘못된 스레드에서 실행되어 불만을 유발한다는 표시가 있습니다. –