본문 바로가기

프로그래밍/C#, WPF, Winform

wxWidgets cannot initialize OLE





TWAIN을 이용해 Kodak CareStream DS를 호출할 때 나타나는 오류입니다.

 

이상한건 어떤 PC는 오류가 나고 어떤 PC는 오류가 안나서 한참을 고생했던 이슈입니다.

 

 

프로그램 본체는 C# WPF 기반의 프로그램이고 Saraff TWAIN을 이용해서 기능을 개발했습니다.

 

twain.Acquire(); 함수를 통해 촬영을 시작할 때 아래 오류창이 5번 표시됩니다.

 

창을 닫고 나면 기능이 정상 동작하지만 여간 불편하기 때문에 이슈를 해결해야 했습니다.

 

PC마다 증상이 달라서 재배포 패키지나 3rd파티 프로그램 문제일 줄 알았는데..

 

원인은..

 

twain.Acquire(); 함수 호출 이후에 화면이 멈추기 때문에 스레드를 이용해 실행하면서 생기는 문제였습니다.

 

System.Threading.Thread를 사용하며 함수를 호출하는 구조인데..

 

함수 속성 중에 ApartmentState 값을 STA로 변경하면 해결되었습니다.

 

Thread.ApartmentState = ApartmentState.STA;

 

VisualStudio에서는 사용되지 않는 속성이라고 아래와 같이 나오지만 실제 값을 적용하면 문제가 해결되었습니다.