首页 > 解决方案 > 如何使用Task异步加载Winforms中的数据

问题描述

我有一个基于 Winforms C# 的 MDI 应用程序,我有 3 个表单

  1. MainForm 这是我的父表单
  2. 作为上述表格的子表格的子表格
  3. BaseView 以上两种形式都是继承自这个基类

如果您在我的 BaseView 中看到,我正在使用 Task 在后台线程中加载数据而不会冻结 UI,这可以正常工作并且应用程序很快就会显示出来。现在的问题是,虽然这个数据加载是在后台发生的,但我正在打开我的子表单,但子表单无法获得 Db 连接,因为后台线程仍在工作,无论如何我可以做某种信号我的子表单现在已经设置了后台 Db 连接,现在子表单可以加载数据。或者我应该改变我试图实现这一目标的方式。

请指教。

 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);
        }
    }

标签: c#.netwinformsasync-await

解决方案


推荐阅读