小弟在winform上加了个chart控件用来绘图,然后新建了一个线程来执行一段耗时操作,这个操作会得到我要显示的数据points[],用chart1.Invoke((MethodInvoker)delegate(){chart1.addXY(,);chart1.update();});调用了匿名方法来实现跨线程更新。最后执行完成后调用了Abort函数来退出新建的线程,结果就提示“由于代码已经过优化或者本机框架位于调用堆栈之上 无法计算表达式的值”的错误。
求达人指点迷津!!
PS:我希望实现的效果是执行完成后就退出线程,然后通过点击一个button再次新建线程执行相同操作,更新chart控件后退出线程。现在退不出来很无奈
求达人指点迷津!!
PS:我希望实现的效果是执行完成后就退出线程,然后通过点击一个button再次新建线程执行相同操作,更新chart控件后退出线程。现在退不出来很无奈
try
{
Newthread.Abort();//这里会出现错误
}
catch(Exception err)//这里err就是提示“由于代码已经过优化或者本机框架位于调用堆栈之上 无法计算表达式的值”
{
Newthread.Abort();//这样倒是强制结束了不过再次调用就会有问题了,而且没有规律,不一定是第几次就崩溃了
}
2:如果处于Invoke状态时,再让主线程Abort newThread时就会出问题。因为此时的主线程已处于阻塞状态。
3:建议:不用Invoke改用BeginInvoke或通过新的线程来执行Abort。
这个放到你的cath只前就可以了
如果在没有执行完毕你就想中断它的话 加上我上边的catch (System.Threading.ThreadAbortException) { }
就行了