源程序如下:
a()
{
b();}b()
{
   Thread thread=new Thread(new ThreadStart(c);
thread.IsBackground = true;
 thread.Start();
}
c()
{
//数据显示,listview
}

解决方案 »

  1.   

    这是因为你的c()是在非主线程的另外一个新产生的线程上运行,但它却却操作线程中生成的控件(listview). .NET的Form和它上边的控件有一个基本要求:对它们进行操作的线成必须是产生它们的那一个,如果不是的话,必须用Invoke或BeginInvoke去同步到那个线程上.
      

  2.   

    我上边说的"用Invoke或BeginInvoke去同步到那个线程上"可以这样做:private delegate void DisplayListviewDelegate();//你的c()函数需要这样写:
    private void c()
    {
        if (myListview.InvokeRequired)
            myListview.Invoke(new DisplayListviewDelegate(DoDisplayJob));
        else
            DoDisplayJob();}private void DoDisplayJob()
    {
    //myListview 中显示数据
    }
      

  3.   

    其实用new EventHandler更简单....呵呵
      

  4.   

    那请你说说new EventHandler啊,谢谢