实现Windows窗体应用程序(.NET 4.0 C#)快速启动的最佳实践

本文关键字:启动 最佳 应用程序 窗体 Windows NET 实现 | 更新日期: 2023-09-27 18:29:40

我使用Visual Studio 2013制作了一个相当复杂的.NET 4.0(C#)Windows窗体应用程序。这个问题很一般,应该也适用于其他版本的.NET和VS。

启动时,系统读取配置文件,解析文件夹并读取文件内容,从数据库中读取数据,执行web请求,并将数据添加到主启动表单上的许多控件中

我想避免出现带有"等待沙漏"的启动屏幕,目标是使应用程序快速启动并立即显示主窗体。

我的解决方案是对一些启动任务使用backgroundworker,使应用程序在获取数据时可见并响应。然后,用户可以选择离开启动表单并开始执行其他任务,而无需等待所有启动过程完成。

使用后台工作人员是否适合此项工作?

除了后台工作者之外,还应该考虑其他哪些方法来实现具有大量启动过程的应用程序的快速启动?

实现Windows窗体应用程序(.NET 4.0 C#)快速启动的最佳实践

在我的应用程序中,我使用启动屏幕。然而,我没有显示出等待的沙漏。相反,它显示了写入当前操作的状态行,例如"读取配置文件"、"连接到数据库"、"执行web请求"等。

当然,应用程序启动速度不会更快,但用户不会有程序挂起的感觉,而且出现的速度也会更快。

在任何情况下,这取决于早期访问是否对用户有意义。一个好的方法也是在用户可以看到界面之前预加载第一个页面/表单/选项卡(在此之前是Splashscreen或加载栏)。

当加载第一位时,您可以异步缓存更多数据,并且只允许用户在这些组件的缓存完成时切换页面/选项卡(在执行此操作时,您必须显示"仍在加载"消息或灰显其他选项卡,以免混淆用户)。如果用户选择使用page/tab/功能来减少加载不必要的信息,您也可以只加载附加数据,但这将导致在使用应用程序时等待,这取决于您。

从技术上讲,由于BackgroundWorker在.NET 4.5中被明确标记为过时,您应该看看引入的wait/async是否会是一个更优雅的解决方案(请参阅MSDN async和await Introduction的异步编程)

MSDN表示:

异步编程的基于异步的方法比几乎在所有情况下都有现有的方法。特别是,这种方法对于IO绑定操作,它优于BackgroundWorker,因为代码更简单,而且您不必防范竞争条件。

查看比较线程Background Worker与Await/Async

如果您选择使用

技术,请参阅一个评论良好的后台工作者代码示例来加载GUI数据

与其说是答案,不如说是建议:

  • 使用后台工作人员适合吗?-对

  • 除了后台工作者之外,还应该考虑其他什么方法来实现具有大量启动过程的应用程序的快速启动?-考虑按需加载,也就是数据的延迟加载。也就是说,只在实际需要时加载数据,而不是一次查询所有数据——可能其中许多数据从未被使用或查看过。如果在UI设置时无法做到这一点,请考虑优化UI,并重新考虑是否应按原样显示所有数据。例如,使用单独的窗口或扩展器来显示详细信息,并在数据可见时查询数据。这不仅可以节省你启动应用程序的时间,还可以确保你以最新的方式显示任何数据。