我是 .NET 的新手。我需要使用 C# winforms 中的异步回调机制完成以下分配。
在表单加载时,我需要从数据库中获取数据并填充到 datagridview 中。检索可能需要很长时间,我想同时使用 UI。我还需要一个回调机制来检查是否填充了 datagridview。我必须使用线程和异步回调机制来实现这一点。
private CustomerEntities cn = null;
delegate CustomerEntities DataSourceDelegate();
delegate void loadGridViewDelegate(CustomerEntities dtCustomers);
DataSourceDelegate delegate_GetCustomers;
public CustomerEntities DataSource()
{
cn = new CustomerEntities();
return cn;
}
private void Form1_Load(object sender, EventArgs e)
{
status.Text = "Loading";
delegate_GetCustomers = new DataSourceDelegate(DataSource);
delegate_GetCustomers.BeginInvoke(LoadCustomerCallBack, null);
}
private void LoadCustomerCallBack(IAsyncResult ar)
{
CustomerEntities dtCutomers;
dtCutomers = delegate_GetCustomers.EndInvoke(ar);
loadGridView(dtCutomers);
}
private void loadGridView(CustomerEntities dtCutomers)
{
if (dataGridView.InvokeRequired)
{
loadGridViewDelegate del = new loadGridViewDelegate(loadGridView);
dataGridView.Invoke(del, new CustomerEntities[] { dtCutomers });
}
else
{
dataGridView.DataSource = dtCutomers.customerDetails;
}
}
datagridview 正在正确填充,但是当我在函数检索数据时尝试访问它时 UI 被阻止。