Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 使用Winforms应用程序响应启动_.net_Winforms_Performance_.net 4.0_Startup - Fatal编程技术网

.net 使用Winforms应用程序响应启动

.net 使用Winforms应用程序响应启动,.net,winforms,performance,.net-4.0,startup,.net,Winforms,Performance,.net 4.0,Startup,我有一个视觉复杂的应用程序,有很多用户界面组件和第三方控件。在启动时,它会进入一个暂时的连接状态,因为所有东西都会调整大小,并且以表单加载(但主要是由于调整大小) 因此,我认为解决方案可能是在form_Load事件的开头隐藏表单,然后在结尾显示它。但是,当代码进入form_Load事件时,表单已经可见 如何确保表单在准备就绪并调整大小时显示。在UI线程上执行Load事件。千万不要将逻辑处理放在UI线程中,因为阻塞它会使UI无响应 您应该分叉一个新线程(参见类)并在那里执行启动逻辑。如果加载屏幕花

我有一个视觉复杂的应用程序,有很多用户界面组件和第三方控件。在启动时,它会进入一个暂时的连接状态,因为所有东西都会调整大小,并且以表单加载(但主要是由于调整大小)

因此,我认为解决方案可能是在form_Load事件的开头隐藏表单,然后在结尾显示它。但是,当代码进入form_Load事件时,表单已经可见


如何确保表单在准备就绪并调整大小时显示。

在UI线程上执行
Load
事件。千万不要将逻辑处理放在UI线程中,因为阻塞它会使UI无响应

您应该分叉一个新线程(参见类)并在那里执行启动逻辑。如果加载屏幕花费的时间超过3秒,则可能正常。您需要使用
Form.Invoke()
和委托来执行与UI线程交互的任何逻辑(例如更改文本框的文本)


您认为在显示表单时会发生
Load
事件的假设也是错误的。
Load
事件发生在组件初始化之后和表单显示之前,然后在表单显示时发生
show
事件。

在UI线程上执行
Load
事件。千万不要将逻辑处理放在UI线程中,因为阻塞它会使UI无响应

您应该分叉一个新线程(参见类)并在那里执行启动逻辑。如果加载屏幕花费的时间超过3秒,则可能正常。您需要使用
Form.Invoke()
和委托来执行与UI线程交互的任何逻辑(例如更改文本框的文本)


您认为在显示表单时会发生
Load
事件的假设也是错误的。
加载
事件发生在组件初始化之后和表单显示之前,然后在表单显示时发生
显示
事件。

这与此类似,因此具有可接受答案的问题:

此MSDN链接与提高windows窗体性能相关,也可能对您有很大帮助:

这与这个问题类似,因此有一个公认的答案:

此MSDN链接与提高windows窗体性能相关,也可能对您有很大帮助:

您的假设并不完全正确:表单加载(或者准确地说:加载事件处理程序)在第一次显示表单时执行。确实,此时表单已经可见,但不可用,因为线程被FormLoad函数阻塞

您有两种选择:

  • 使用没有控件和顶部栏的启动屏幕,因为它没有输入,所以不会看到线程被阻塞
  • 在显示表单之前,请准备好您的尺寸和位置。在你召开展会之前,设定尺寸和位置是完全合法的。例如,在窗体的构造函数中
  • 更改逻辑,使长计算不在UI线程中。使用ThreadPool和ThreadPool线程很简单,然后调用表单上的方法

  • 您的假设并不完全正确:表单加载(或者准确地说:加载事件处理程序)在第一次显示表单时执行。确实,此时表单已经可见,但不可用,因为线程被FormLoad函数阻塞

    您有两种选择:

  • 使用没有控件和顶部栏的启动屏幕,因为它没有输入,所以不会看到线程被阻塞
  • 在显示表单之前,请准备好您的尺寸和位置。在你召开展会之前,设定尺寸和位置是完全合法的。例如,在窗体的构造函数中
  • 更改逻辑,使长计算不在UI线程中。使用ThreadPool和ThreadPool线程很简单,然后调用表单上的方法