代码之家  ›  专栏  ›  技术社区  ›  Shax

如何使用任务在Winforms中异步加载数据

  •  0
  • Shax  · 技术社区  · 6 年前

    我有一个基于Winforms C的MDI应用程序,有3个窗体

    1. 主窗体是我的父窗体
    2. BaseView上述两种形式都是从这个基类继承的

    如果你在我的BaseView中看到,我使用Task在后台线程中加载数据,而不冻结UI,这很好,应用程序很快就会显示出来。现在的问题是,当数据加载在后台进行时,我正在打开我的子窗体,但子窗体无法获得数据库连接,因为后台线程仍在工作,不管怎样,我可以向我的子窗体发送某种信号,说明后台数据库连接已经设置好,现在子窗体可以加载数据了。

     public partial class BaseView : Form
        {
    
            public BaseView()
            {
                var firstTimeInitializationTask = new System.Threading.Tasks.Task(() => { FirstTimeInitialization(); });
                firstTimeInitializationTask.Start();
            }
    
            private void FirstTimeInitialization()
            {
                Thread.Sleep(10000); // just put this for testing purpose
                DbConnection.Connect(CommonRoutines.DbConnectionString);
            }
        }
    
    0 回复  |  直到 6 年前