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未创建实例对象?
{
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未创建实例对象?
那估计是 PostBack 之后, Chart1 尚未初始化,Button1_Click 函数就执行了。
那估计是 PostBack 之后, Chart1 尚未初始化,Button1_Click 函数就执行了。我搞错了,应该是 Chart1 在闭包环境里面的问题,多线程的闭包问题比较复杂,建议你使用带参数的 ThreadStart 类,在 Start 函数执行的时候把 Chart1 传过去。
还是不行的话,查看你传入 Start(……) 方法的参数是否正常,如果不正常,那么可以确定问题不出在异步线程中。而是 Chart1 的创建和使用的先后顺序出了问题。如果正常的话,那么再想异步线程里面的环境问题。