更新:只是總結一下我的問題歸結爲:可以構建在後臺線程的形式,然後在UI線程顯示
我希望構建.NET窗體和控件沒有創建任何窗口句柄 - - 希望該過程被推遲到Form.Show/Form.ShowDialog
任何人都可以確認或否認這是否屬實?
我有一個很大的WinForms窗體與選項卡控件,許多窗體上的許多控件,加載了幾秒鐘後暫停。我將它縮小到InitializeComponent中的設計器生成的代碼,而不是構造函數或OnLoad中的任何邏輯。
我很清楚,我不能嘗試與除主UI線程以外的任何線程上的UI進行交互,但我想要做的是讓應用程序預加載此表單(運行構造函數),所以只要用戶想打開它,就可以立即顯示在UI線程上。然而,當構建在後臺線程,在這條線的設計:
this.cmbComboBox.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;
,我發現了錯誤
當前線程必須設置爲單 線程單元(STA)模式之前可以進行OLE 調用。確保你的主函數有標記的STAThreadAttribute 。
現在,這是一半,設計師的文件,這給了我希望,一般這個策略會奏效。但是這條線似乎試圖立即啓動某種OLE呼叫。
任何想法?
編輯:
我想我並沒有在這裏說清楚。延遲似乎發生在設計人員生成的代碼中的bazillion控件的構建過程中。
我的希望是,所有這些初始化代碼都是在沒有實際嘗試觸摸任何真正的Win32窗口對象的情況下發生的,因爲窗體尚未實際顯示。
事實上,我可以設置(例如)從這個後臺線程標籤文本和位置給了我希望這是真實的。但是,對於所有房產來說可能並非如此。
是僅針對cmbox或所有控件引發的異常。 因爲如果是這樣,您可以將屬性設置爲最後一件事 – 2010-01-15 16:27:28
只是爲了在組合框上設置AutoCompleteMode。在設計師的這個上面有很多代碼設置文本/名稱/位置/大小/等等。控制屬性。 – Clyde 2010-01-15 16:29:14
雖然它是「預加載」表單,你的應用程序會做什麼?可能顯示「請稍候」的消息? – Codesleuth 2010-01-15 16:29:28