c# - 加载大量前期数据。 。同步或异步。

标签 c# winforms multithreading

所以我有一个 winforms 应用程序,可以在启动时同步下载一组数据。这显然需要一段时间,但是当任何服务或 GUI 类加载时,它们都会有这些数据。我可以更改它以放置后台线程,但随后需要访问此数据的每个组件都必须在该数据准备好时不断收到通知。对于我的每个依赖于要加载的数据进行 If (Loaded) 检查或必须订阅已加载事件的类来说,这似乎都是糟糕的设计。 。 。有什么想法吗?

还有其他想法吗?

最佳答案

我编写了许多具有与您所描述的行为类似的应用程序,并为您提供了三个建议......

启动画面

向您的应用程序添加一个启动屏幕,显示多个启动步骤的状态。过去,当应用程序在用户开始使用该应用程序之前必须在启动时执行许多步骤时,我就使用过此方法 - 通过 Active Directory 确认身份和访问授权、联系数据库以获取系统信息、加载静态数据、与指定 Web 服务的初始联系、检查先决条件(如 Crystal 报表)是否已安装并正常运行等。

订阅

让每个组件向您的数据加载器注册兴趣,并在数据可用时收到通知。这是观察者模式,没有什么问题,尽管管理订阅可能有点困惑。

延迟加载

设计应用程序的其余部分以尽可能晚地请求数据,为后台加载提供尽可能广泛的机会来完成。启动后快速启动的用户必须等待必要的数据加载;慢慢来的用户(也许他们启动了应用程序,然后切换到 Outlook)发现响应是立即的。

关于c# - 加载大量前期数据。 。同步或异步。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/364687/

相关文章:

c# - 'fixed' : working on memory location or object? 的内部工作

c# - 在不锁定文件的情况下在 Winforms 中显示动画 gif

c# - 覆盖系统快捷键

java - 我们是否应该避免显式使用 wait/notify/notifyAll

java - sleep() 方法如何在给定线程和输出上工作?

c++ - i++线程安全

c# - 错误告诉我我还没有关闭连接,但不是吗?

c# - 无法创建抽象类?

c# - 在 Orchard CMS 中使用 Document.cshtml 的替代品

c# - 如何在 Windows 窗体 (C#) 中动态添加组合框并将其绑定(bind)到 sql 数据库中表的列