2012-05-09 42 views
3

전화가 걸리거나 수신 될 때 브라우저 창 (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

+0

이것은 일반적으로 프로그램 시작 문제로 인해 발생합니다. 사용자가 만든 모든 스플래시 스크린을 제거하고 생성 된 맨 처음 윈도우가 메인 스레드에서 초기화되는지 확인하십시오. 이렇게하면 SystemEvents 클래스가 제대로 초기화됩니다. –

+0

안녕 한스, 답장을 보내 주셔서 감사합니다. 생성 된 첫 번째 창은 주 스레드에서 초기화됩니다. 그러나 첫 번째/주 양식은 오류가 아닙니다. 기본 폼에서 열리는 브라우저 창은 오류를 발생시키는 창입니다. 또한 컴퓨터가 절전 모드로 들어간 후 깨어 난 후에 만 ​​오류가 발생한다는 점에 유의해야합니다. OnPowerChange는 폼이 닫히고 초기로드에서와 같이 폼이 다시 실행되도록 다시 시작합니다. – madeFromCode

+0

글쎄, 불분명하지만 브라우저가 확실히 이런 종류의 오류를 생성합니다. 질문 제목이 틀린 점에 유의하십시오. ** STA 스레드에서 ** 생성되지 않기 때문에 불평합니다. OnPowerChange가 무엇 일지는 모르겠지만 사용하는 이벤트가 잘못된 스레드에서 실행되어 불만을 유발한다는 표시가 있습니다. –

답변