UPDATE를 표시합니다 : 그냥 내 질문에 아래로 삶은 것을 요약 :가능한 다음, 백그라운드 스레드에서 양식을 구성 UI 스레드에서
내가 건설 .NET 폼과 컨트롤은 모든 창 핸들을 만들지 않은 것을 기대했다 - - Form.Show /Form.ShowDialog
까지 프로세스가 지연되기를 기대하는 사람이 있는지를 확인하거나 거부 할 수 있습니까?
두드러진 WinForms 폼에는 탭 컨트롤이 있습니다. 폼에있는 많은 컨트롤이 몇 초 동안로드되는 동안 일시 중지됩니다. 필자는 생성자 또는 OnLoad에서 내 논리가 아닌 InitializeComponent에서 디자이너가 생성 한 코드로 범위를 좁혔습니다.
주 UI 스레드가 아닌 다른 스레드에서 UI와 상호 작용할 수 없다는 것을 잘 알고 있지만 응용 프로그램에이 양식을 미리로드해야합니다. 백그라운드에서 생성자를 실행하십시오. 따라서 사용자가 UI 스레드를 열려고하는 즉시 UI 스레드에 표시 할 준비가되었습니다. 그러나, 디자이너에서이 줄에, 백그라운드 스레드에서 건설 :
this.cmbComboBox.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;
나는 오류
납니다현재 스레드가 단일 스레드 아파트 (STA) 모드 이전으로 설정해야합니다 OLE 전화를 걸 수 있습니다. 주 기능에 STAThreadAttribute 이 표시되어 있는지 확인하십시오.
지금이 날 일반적으로이 전략이 작동합니다 희망을주는 디자이너 파일, 중간 아래입니다. 그러나이 특정 라인은 일종의 OLE 호출을 즉시 시작하려고 시도하는 것 같습니다.
아이디어가 있으십니까?
편집 :
나는 여기에 자신을 분명히하지 않는다고 생각합니다. 설계자가 생성 한 코드에서 bazillion 컨트롤을 생성하는 동안 딜레이가 발생하는 것으로 보입니다.
실제로이 형식이 실제로 표시되지 않았기 때문에이 초기화 코드가 실제로 실제 Win32 창 개체를 건드리지 않고 일어났습니다.
이 배경 스레드에서 레이블 텍스트와 위치를 설정할 수 있다는 사실이 나에게 사실이라는 희망을주었습니다. 그러나 그것은 모든 속성에 대해 사실이 아닐 수도 있습니다.
예외는 cmbox 또는 모든 컨트롤에서만 발생합니다. 그렇다면 콤보 상자에서 AutoCompleteMode를 설정하기 위해 마지막으로 –
으로 속성을 설정할 수 있기 때문입니다. 위의 디자이너는 텍스트/이름/위치/크기/등을 설정하는 코드가 많습니다. 컨트롤의 속성 – Clyde
양식을 '미리로드'하는 동안 응용 프로그램은 무엇을 할 것입니까? '기다려주세요'라는 메시지가 표시 될 수 있습니까? – Codesleuth