winfrom中避免读取数据时窗口诈死
原创比较实用的一个方法,希望对你们有帮助。
net4.5才支持
//使用线程
System.Threading.Tasks.Task.Run(new Action(方法名)); //Action里的方法不允许有参数
//1.禁用异常(为解决使用线程后,DataGridView滚动条不出现*注意:不可在多线程中随便使用。)
Control.CheckForIllegalCrossThreadCalls = false;
//2.使用 Invoke 将执行数据绑定的代码交回给主线程(因为 DataGridView 是主线程创建的(为解决使用线程后,DataGridView滚动条不出现))
DataGridView.Invoke(new InvokeHandler(delegate ()
{
DataGridView.DataSource = null;
DataGridView.DataSource = 数据源;
}));
net4.0就可以支持
private delegate void InitDataSourceDelegate();
private void Load(object sender, EventArgs e)
{
Thread t = new Thread(InitDataSource);
t.IsBackground = true;
t.Start();
}
private async void InitDataSource()
{
//我这里放的是调用Api请求,因为耗时比较久
//GetData();
//数据请求完成后,去执行委托把数据绑定到控件上
this.Invoke(new InitDataSourceDelegate(Init));
}
private async void Init()
{
//给控件绑定数据源
}
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除