c# 界面异步加载
有2个窗体Form1和Form2
form1上有个按钮点击之后show出来form2
现在问题来了....form2上有10几个textbox
在form2 的Load 的时候读取数据赋值到这个十几个textbox上显示。
可以由于网络延迟、数据量大、计算耗时(因为读出数据来还要有各种运算,挺耗时)等等原因,
导致form2 要等好几秒才能显示出来,体验非常差...
求异步解决方案,先显示出来界面,数据在异步加载到textbox上.....(难道要对每个控件进行委托处理?)
[解决办法]
把赋值写在form2的Shown事件里,这样界面会先出现
[解决办法]
form1上有个按钮点击之后show出来form2
现在问题来了....form2上有10几个textbox
在form2 的Load 的时候读取数据赋值到这个十几个textbox上显示。
可以由于网络延迟、数据量大、计算耗时(因为读出数据来还要有各种运算,挺耗时)等等原因,
导........
void Form_Load(object sender, EventArgs e)
{
abc();
}
void Form_Load(object sender, EventArgs e)
{
ThreadPool.QueueUserWorkItem(h=> abc());
}
this.BeginInvoke(...)来处理一下。
form1上有个按钮点击之后show出来form2
现在问题来了....form2上有10几个textbox
在form2 的Load 的时候读取数据赋值到这个十几个textbox上显示。
可以由于网络延迟、数据量大、计算耗时(因为读出数据来还要有各种运算,挺耗时)等等原因,
导........
比如说原来是void Form_Load(object sender, EventArgs e)
{
abc();
}
那么你可以改为void Form_Load(object sender, EventArgs e)
{
ThreadPool.QueueUserWorkItem(h=> abc());
}
这就可以异步处理了。
当然,你的在计算完毕显示时,需要使用this.BeginInvoke(...)来处理一下。
不需要“对每个控件”处理,你在计算完毕,可以一次性异步显示。
this.BeginInvoke(...) 还不是要一个个写?
不需要“对每个控件”处理,你在计算完毕,可以一次性异步显示。
this.BeginInvoke(...) 还不是要一个个写?
数据出来后,把赋值的都放在beginInvoke里面。
给点提示吧,写点代码看看!
ThreadPool.QueueUserWorkItem(item =>
{
DataSet dsInfo = GetDB();//GetDB获取数据
this.BeginInvoke(new Action(() =>
{
textBox1.Text = dsInfo.Tables[0].Rows[0]["Col1"].ToString();
textBox2.Text = dsInfo.Tables[0].Rows[0]["Col2"].ToString();
}));
});
不需要“对每个控件”处理,你在计算完毕,可以一次性异步显示。
this.BeginInvoke(...) 还不是要一个个写?
数据出来后,把赋值的都放在beginInvoke里面。
给点提示吧,写点代码看看!
如果与服务器只需要交互一次就可以得到数据。比如DataSet一个集合。
可以这样:
用methodInvoker吧,支持.net 2.0的。。