c# - 如何使用Task异步加载Winforms中的数据
问题描述
我有一个基于 Winforms C# 的 MDI 应用程序,我有 3 个表单
- MainForm 这是我的父表单
- 作为上述表格的子表格的子表格
- 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);
}
}
解决方案
推荐阅读
- php - 从数组中提取数字
- c++ - 如何使用 typeinfo.name C++ 声明变量
- python - 如何使用python将数据插入只有两位小数的表中?
- reactjs - 如何使用单个切换按钮推送和删除具有 3 个三个属性的对象
- abap - 来自应用程序服务器目录 ABAP 的自定义搜索帮助
- java - 是否可以在同一个线程中等待回调?
- json - 我需要通过控制器传递 Json 来查看。如何?
- entity-framework - 实体框架 - 插入具有多对多映射的模型
- wifi - 是否有一种标准方法可以从路由器/dhcp 服务器以编程方式获取 dhcp 客户端表?
- c++ - `void`“对象”的非定义声明:C++ 标准的哪一部分禁止它们?或者是吗?