110,533
社区成员
发帖
与我相关
我的任务
分享
private void btnAny_Click(object sender, EventArgs e)
{
AsyncGetDataDelegate d = new AsyncGetDataDelegate(GetData);
d.BeginInvoke(ia =>
dgvData.Invoke(new MethodInvoker(()=>dgvData.DataSource = d.EndInvoke(ia)))
, null);
}
如果你的VS版本是2012或以上。
那可以更简单的写成:
private async void button_click(object sender, EventArgs e)
{
dgvData.DataSource = await Task.Run<DataTable>(() => GetData());
}
private void GetData()
{
//下面两句跑在新建线程
PeelerssPoDetail peerpodtil = new PeelerssPoDetail();
DataTable db = peerpodtil.GetPoDtilList(ParmFilter());
//这句跑在UI线程
dgvData.DataSource = db; //这个过程不能假死
}
那么大致改成这样就行了:
delegate DataTable AsyncGetDataDelegate();
//在线程里处理代码
private DataTable GetData()
{
PeelerssPoDetail peerpodtil = new PeelerssPoDetail();
return peerpodtil.GetPoDtilList(ParmFilter());
}
private void btnAny_Click(object sender, EventArgs e)
{
AsyncGetDataDelegate d = new AsyncGetDataDelegate(GetData);
d.BeginInvoke(ia => dgvData.DataSource = d.EndInvoke(ia), null);
}