我正在维护一个较旧的 winforms 应用程序,由于数据库查询、数据网格自定义和加载大量数据,第一个窗口需要 3-5 秒才能加载。
我应该为此添加一个前屏幕,用户可以在此旧窗口和尚未实现的新功能之间进行选择。
因此,除了重构一些数据库查询和其他旧代码之外,我还想通过执行以下操作来改进此窗口的加载时间:
- 用户进入前屏
- 慢速加载窗口开始加载,就像现在一样,但在另一个线程中隐藏并在后台,而前屏幕窗口处于活动状态。如果在用户实际单击按钮打开窗口之前窗口已完全加载,那么它仍然应该是隐藏的。
- 如果用户单击按钮打开窗口,它将立即显示,因为它已经加载并准备就绪。
这就是我所拥有的:
private void startBackgroundLoading()
{
var myThread = new Thread(openSlowLoadingWindow);
myThread.SetApartmentState(ApartmentState.STA);
myThread.Start();
}
private void openSlowLoadingWindow()
{
System.Windowns.Forms.Application.Run(new SlowWindow());
}
我正在使用 Application.Run() 因为上面说明的两个窗口(前屏和慢速加载)位于不同的项目中。
显然,上面的代码将启动新线程并在加载完成后向我显示窗口,但如上所述,我想告诉它何时实际显示自己。
我尝试了几种方法来在后台运行新线程、隐藏窗口和其他各种东西。
我对编程比较陌生,所以如果我从完全错误的角度进行攻击,请告诉我如何改进。
我绑定到 .net 4.0,所以新的 async/await 东西不是一个选项。
最好的问候, 埃里克