我有一个Form里边有一个TreeView需要调用数据库来更新数据.
每次打开Form都很慢.
我想做一个线程,先让Form显示出来,然后再慢慢更新TreeView.但是怎么也不能成功
因为代码比较多,我用一个Label来代替.
区别在于这个Label如果不使用代理可以完成我要的功能,但TreeView会提示
"在该控件上执行的操作正从错误的线程调用。使用 Control.Invoke 或 Control.BeginInvoke 封送到正确的线程才能执行此操作。"
后来使用代理.但结果是和没有使用多线程的效果一样.
代码如下. public main1()
{
InitializeComponent();
CheckForIllegalCrossThreadCalls = false;
new Thread(new ThreadStart(SetLabel)).Start(); }
delegate void setLabelDelegate(); private void SetLabel()
{
this.Invoke(new setLabelDelegate(setLabel));
}
private void setLabel()
{
Thread.Sleep(6000);
label1.Text = "设置成功!";
}
比如你的那句 Thread.Sleep(6000);改成这样就行了delegate void setLabelDelegate(); private void SetLabel()
{
Thread.Sleep(6000);
this.Invoke(new setLabelDelegate(setLabel));
}
private void setLabel()
{
label1.Text = "设置成功!";
}
比如你的那句 Thread.Sleep(6000);改成这样就行了delegate void setLabelDelegate(); private void SetLabel()
{
Thread.Sleep(6000);
this.Invoke(new setLabelDelegate(setLabel));
}
private void setLabel()
{
label1.Text = "设置成功!";
}