实际上我的数据集源是mysql,这是我的代码
private void frmNewInstallment_Load_1(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'cricflip_RoyalResidencyDataSet.booked_homes' table. You can move, or remove it, as needed.
this.booked_homesTableAdapter.Fill(this.cricflip_RoyalResidencyDataSet.booked_homes);
}
但是,我还是花了很长时间来加载这种形式,我想消除这种延迟。有没有办法异步这样做。
答案 0 :(得分:3)
不建议在E0605 05:03:54.617558520 1232 tcp_client_posix.c:191] failed to connect to 'ipv4:127.0.0.1:9000': timeout occurred
事件中执行繁重的操作,我建议使用Form_Load
来执行此操作。
thread/task
答案 1 :(得分:1)
不要使用表单加载事件。在表单加载事件期间创建后台工作程序,启动后台工作程序。让后台工作人员更新GUI,以便用户知道它仍然很忙。
实施例; https://msdn.microsoft.com/en-us/library/cc221403(v=vs.95).aspx
答案 2 :(得分:1)
你不需要不同的线程。在从数据库线程加载数据期间什么也不做 - 只等待数据库的响应。
使用async/await
方法,您将使用相同的UI线程,在等待响应期间将释放该线程。
Form.Load
eventhandler似乎已经足够了
将Load
eventhandler标记为async
,并使您的数据库也调用异步。
public async Task<DataTable> GetData()
{
//Your load logic
}
private async void Form_Load(object sender, EventArgs e)
{
this.ComboBox.DataSource = await GetData();
}
Asynchronous Programming with async and await (C#)
据我所知,async / await完全是为IO进程设计的。
只有在计算/处理内存中的某些数据时才需要不同的线程。