2012-05-26 3 views
1

속성을 설정하기 위해 모든 양식의 컨트롤을 반복해야하기 때문에 활성자를 사용하여 양식을 인스턴스화해야합니다. 이 절차에서는 아래 코드를 사용하고 있습니다.Activator 콤보 상자 집합 자동 완성 모드에서 충돌합니다

using (Form frm = (Form)Activator.CreateInstance(type)) 
        { 
         using (SqlConnection cn = new SqlConnection(Program.connectionString)) 
         { 

          cn.Open(); 
          General.ProcessControls(cn, frm, frm.GetType().Name); 
          cn.Close(); 
         } 
        } 

여기까지 좋습니다. 위의 코드는 자동 완성 모드가있는 SuggestAppend 모드로 설정된 콤보 상자가있는 것을 제외하고 모든 양식에 대한 매력처럼 실행됩니다. 이 양식에서 Autocomplete 모드를 설정하려고하면 InvocationTargetException이 응용 프로그램의 함수 InitializeComponent()로 충돌합니다. 아래에 내 응용 프로그램이 충돌하는 코드 줄이 있습니다.

this.comboBoxAreaType.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend; 
     this.comboBoxAreaType.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems; 

이 문제를 해결할 수있는 방법이 있습니까?

+0

TargetInvocationException의 내부 예외는 무엇입니까? –

+0

어떤 스레드가'Activator.CreateInstance'를 실행 중입니까? 기본 UI 스레드입니까? (Visual Studio의 스레드 창에있는 녹색). –

+0

A) 내부 예외는 "현재 스레드가 OLE 호출이 가능하기 전에 단일 스레드 아파트 (STA) 모드로 설정되어야합니다 .Main 함수에 STAThreadAttribute가 표시되어 있는지 확인하십시오." B)이 모든 작업을 수행하는 절차는 기본 UI 스레드가 아닌 별도의 스레드에서 실행됩니다. – Bilias7

답변

0

agent-j 귀하의 의견은 무엇이 잘못되었는지 이해하는 데 매우 도움이되었습니다.

스레드 시작() 호출 직전에 내 스레드를 STA AppartmentState로 설정하기 위해 bellow 명령을 추가하면 이제는 매력처럼 작동합니다.

thread.SetApartmentState(ApartmentState.STA); 
관련 문제