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

问题描述 投票:2回答:3

我使用Visual Studio 2013创建了一个相当复杂的.NET 4.0(C#)Windows窗体应用程序。但问题非常普遍,并且应该适用于其他版本的.NET和VS.

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

我想避免使用“等待沙漏”的启动画面,目标是使应用程序快速启动并立即显示主窗体。

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

使用backgroundworker适合这个吗?

应该考虑使用哪些其他方法来代替背景工作者,或者除了背景工作者之外,还可以考虑使用大量启动程序来快速启动应用程序?

c# .net
3个回答
2
投票

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

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

从技术上讲,由于BackgroundWorker在.NET 4.5中被明确标记为过时,您应该看看引入的await / async是否会为您提供更优雅的解决方案(请参阅MSDN Asynchronous Programming with Async and Await 简介)

MSDN说:

在几乎所有情况下,基于异步的异步编程方法优于现有方法。特别是,对于IO绑定操作,此方法优于BackgroundWorker,因为代码更简单,您无需防范竞争条件。

查看比较主题Background Worker vs Await/Async

如果您选择使用该技术,请参阅backgroundworker code to load GUI数据的评论良好的示例


3
投票

在我的应用程序中,我使用启动画面。但是,我没有显示等待沙漏。相反,它显示了写入当前操作的状态行,例如“读取配置文件”,“连接到数据库”,“执行Web请求”等。

当然,应用程序启动速度不快,但用户没有挂起程序的感觉,而且看起来更快。


1
投票

而不是建议而不是答案:

  • 使用backgroundworker适合这个吗? - 是的
  • 应该考虑使用哪些其他方法来代替背景工作者,或者除了背景工作者之外,还可以考虑使用大量启动程序来快速启动应用程序? - 考虑按需a.k.a.延迟加载数据。也就是说,只在实际需要时才加载数据,而不是一次性查询所有数据,而不会被使用或查看。如果在UI设置中无法做到这一点,请考虑优化UI并重新考虑是否应按原样显示所有内容。例如,使用单独的窗口或扩展器来显示详细信息,并在数据可见时查询数据。这不仅可以节省您在应用启动时的时间,还可以确保以最新方式显示任何数据。
© www.soinside.com 2019 - 2024. All rights reserved.