protected void Button1_Click(object sender, EventArgs e)
        {
            Thread td = new Thread(new ThreadStart(PrintMessage));
            td.Start();
        }
private void PrintMessage()
{
       for (int j = 0; j < xVale.Length; j++)
          {
                    if (this.Chart1.Series.IndexOf("Series1") < 0)
                            {
                                this.Chart1.Series.Add("Series1");
                            }
                            Chart1.Series["Series1"].Points.AddXY(xVale[j], dic[xVale[j]][0, 0], dic[xVale[j]][0, 1]);
                            
                        }
                        else
                        {
                           
                        }
                    }
                }
            }
}
大致的代码如上,当运行到上面标红处时,抛出异常,Chart1.Series未创建实例对象?

解决方案 »

  1.   

    你在哪里曾经看到过 在网页里面使用Thread ?告诉我 我去学习一下....
      

  2.   


    那估计是 PostBack 之后, Chart1 尚未初始化,Button1_Click  函数就执行了。
      

  3.   


    那估计是 PostBack 之后, Chart1 尚未初始化,Button1_Click  函数就执行了。我搞错了,应该是 Chart1 在闭包环境里面的问题,多线程的闭包问题比较复杂,建议你使用带参数的 ThreadStart 类,在 Start 函数执行的时候把 Chart1 传过去。
      

  4.   

    ParameterizedThreadStart
      

  5.   

    使用带参数的ParameterizedThreadStart 还是不行
      

  6.   


    还是不行的话,查看你传入 Start(……) 方法的参数是否正常,如果不正常,那么可以确定问题不出在异步线程中。而是 Chart1 的创建和使用的先后顺序出了问题。如果正常的话,那么再想异步线程里面的环境问题。
      

  7.   

    winform的话,因为要调用UI所以只能在主线程调用,子线程是调不到的,如果想在子线程去调用UI,那么用invoke方法,或者 begininvoke方法。