Right now do !

Web응용프로그램에서 ActiveX를 품은 WinForm실행

by 지금당장해

 Web응용프로그램에서 왜 WinForm을 실행 해야 하는가 그것도 ActiveX를 품은 해를 품은 달 만큼이나 이상한 상황인데 뭐 암튼 업무라는 것을 하다 보면 이런 일이 생긴다. "어떤 문제를 해결 해보자고 한 천재적인 부하 직원 영우의 발상에서 시작 되었다." 정도만 기록 해둔다.

 

 일단 Web응용프로그램에서 WinForm의 실행은 문제 없이 성공 했다. 두번째 스텝에서 여지 없이 걸렸다. WinForm에 Active를 넣고 실행 하니 예상 했던 대로 스레드 관련 하여 아래와 같은 오류가 발생한다.

 

 

System.Threading.ThreadStateException() 처리되지 않았습니다.

현재 스레드가 단일 스레드 아파트에 없으므로 ActiveX 컨트롤 'XXXXXXX-XXXXXXXX-XXXXXX'() 인스턴스화할 없습니다.

 

이와 관련된 자료를 찾아 보면 "Threaded Apartment" 관련된 설정을 STA로 변경하라는 기술 문서들을 만날 수 있는데 처음에 시도 했던 방법은 Current Thread의 그것을 STA를 변경 했더니만 또 다른 예외를 유발 했다. 실패한 케이스니까 이거 관련된 이야기는 이쯤에서 그만두고 그럼 어떻게 처리 했는가 .....

 

일단 쓰레드를 하나 생성하고 출발 시키기 전에 STA로 설정해서 출발 시키는 방법으로 처리 했다. 아래 코드는 당근 Web응용프로그램의 일부임을 다시 밝혀 둔다.

 

    protected void Button1_Click(object sender, EventArgs e)
    {       
        System.Threading.Thread myThread = new System.Threading.Thread(MyThreadEntryPoint);
        myThread.SetApartmentState(System.Threading.ApartmentState.STA);
        myThread.Start();
    }

    [STAThread]
    private void MyThreadEntryPoint()
    {
        TestClassLib.TestForm frm = new TestClassLib.TestForm();
        frm.Location = new System.Drawing.Point(-500, -500);
        frm.Size = new System.Drawing.Size(0, 0);
        frm.Show();
    }

 

뭐 코드는 쉽다. 여기 까지...

블로그의 정보

지금 당장 해!!!

지금당장해

활동하기