Don*_*nny 3 .net c# data-binding devexpress c#-5.0
我刚收到几年前开发的旧应用程序的错误列表,我需要解决的一件事是将数据加载到一个屏幕所需的时间,当然,屏幕被冻结,不幸的是这是在WinForms .NET 4.5中.数据被加载到WinForms DataGridView中.我想知道是否有任何方法使用C#5异步加载此数据并等待,同时刷新网格以添加下一组数据.它可能是在滚动或在后台.任何想法?
尝试从异步线程将所有数据加载到数组中,然后使用Invoke将数组插入DataGridView.
从Form_Load中调用它
new Thread(new ThreadStart(Run)).Start();
Run Code Online (Sandbox Code Playgroud)
然后创建此方法
private void Run()
{
//DataArray
//Load Everything into the DataArray
Invoke(new EventHandler(delegate(object sender, EventArgs e)
{
//Load DataArray into DataGridView
}), new object[2] { this, null });
}
Run Code Online (Sandbox Code Playgroud)
我相信这是将某些内容加载到Control中的最佳方式,因为不允许在MainThread之外触摸控件.我不知道为什么微软会强制执行此操作,但确实如此.可能有一种方法可以使用Reflection修改MainThread之外的Controls.
您还可以将数据缓慢加载到DataGridView中.加载所有数据需要更长时间,但它允许您在加载时继续使用表单.
private void Run()
{
//DataArray
//Load Everything into the DataArray
for(/*Everything in the DataArray*/)
{
Invoke(new EventHandler(delegate(object sender, EventArgs e)
{
//Load 1 item from DataArray into DataGridView
}), new object[2] { this, null });
Thread.Sleep(1); //This number may have to be tweeked
}
}
Run Code Online (Sandbox Code Playgroud)