更新:只是总结一下我的问题归结为:可以构建在后台线程的形式,然后在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