我的窗口上有一个TreeView控件,里面的内容是从数据库中查询出来的,时间较长,为了减少等待时间,我希望将该控件的填充放到一个线程中完成,但是却报错:
==================================
未处理的“System.InvalidOperationException”类型的异常出现在 system.windows.forms.dll 中。其他信息: 在该控件上执行的操作正被错误的线程调用。必须使用 Control.Invoke 或 Control.BeginInvoke 封送到正确的线程才能执行此操作。
====================================如果填充内容放在Load中则正确,示例代码如下:
1、正确执行时的代码:
private void Form1_Load(object sender, System.EventArgs e)
{
for(int i=0;i<5;i++)
{
TreeNode newtreenode=new TreeNode(i.ToString());
for(int j=0;j<=i;j++)
{
TreeNode subNode=new TreeNode(j.ToString());
newtreenode.Nodes.Add(subNode);
}
this.treeView1.Nodes.Add(newtreenode);
}}2、使用线程,报告错误的代码如下(其实是一样的,就是执行的地方不一样):
private void Form1_Load(object sender, System.EventArgs e)
{
Thread thread=new Thread(new ThreadStart(GetInfo));
thread.Start();}
private void GetInfo()
{
for(int i=0;i<5;i++)
{
TreeNode newtreenode=new TreeNode(i.ToString());
for(int j=0;j<i;j++)
{
TreeNode subNode=new TreeNode(j.ToString());
newtreenode.Nodes.Add(subNode);
}
this.treeView1.Nodes.Add(newtreenode);
}}
这是怎么回事呢,如果想在线程中完成该如何处理,或者如何加快窗口的显示速度。