zedgraph跨线程刷新报错

yilaozhuang 2016-02-16 10:15:23
我在从线程中刷新主界面中的zedgraph时候,报错,请教大神们该如何修改。上代码

main()
{
。。。。。。。。。。。。。。
//利用线程操作,避免界面不能操作
threadNew = new Thread(new ThreadStart(ReadSP_writeExcel));
threadNew.Start();
}
}


线程程序:
public void ReadSP_writeExcel()
{
PointPairList Data_T11 = new PointPairList();
。。。。。。中间数据计算
Data_T11.Add(rowCount1, T11);
//RealTime_Update_Curve("电池1", "T1", Data_T11);
//更新曲线
GraphPane myPane = zgc.GraphPane;
string Y_Lable = "TPF";

myPane.XAxis.Title.Text = "点数";

myPane.XAxis.Type = AxisType.Linear;
myPane.XAxis.CrossAuto = true;

myPane.XAxis.Scale.IsVisible = true;
myPane.XAxis.Scale.MajorStepAuto = true;
myPane.XAxis.Scale.MinorStepAuto = true;
myPane.YAxis.MajorGrid.IsVisible = true;//水平辅助线
myPane.XAxis.MajorGrid.IsVisible = true;//垂直辅助线

myPane.CurveList.Clear();
myPane.YAxis.Title.Text = Y_Lable;
LineItem curve = myPane.AddCurve("TPF", Data_T11, Color.Red, SymbolType.Circle);
zgc.AxisChange();
Refresh();//////////////////////这里提示错误????????????????


//线程等待更新
System.Windows.Forms.Application.DoEvents();
System.Threading.Thread.Sleep(10);

}

=================
请教大神们,这里该如何处理才能在线程中刷新zedgraph,最好能给个例子,或者在小弟的程序上简单给修改一下,先谢谢
...全文
194 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
有时想起 2016-02-18
  • 打赏
  • 举报
回复
this.invoke(new Action()=>{zgc.invalidate();});
xdashewan 2016-02-17
  • 打赏
  • 举报
回复
你可以用这种方式

Invoke(new Action(delegate
{
         //代码
}));
yilaozhuang 2016-02-17
  • 打赏
  • 举报
回复
引用 3 楼 xdashewan 的回复:
[quote=引用 2 楼 yilaozhuang 的回复:] 我会使用委托,我现在的程序也用到在线程中刷新标签。
看了你一你的代码,你的委托在哪里,在哪里,在哪里?[/quote] zedgraph的委托程序实在不知道怎么写,我使用的委托是刷新主界面一个textbox的程序 private void SetTextBox_T13(double val) { if (textBox_T13.InvokeRequired == false) { textBox_T13.Text = val.ToString("F1"); } else { Delegate_SetTextBoxValue setbox = new Delegate_SetTextBoxValue(SetTextBox_T13); this.textBox_T13.Invoke(setbox, val); } } 文本框的操作很简单,我能明白怎么写,zedgraph的不知道从哪里下手写委托
xdashewan 2016-02-17
  • 打赏
  • 举报
回复
引用 2 楼 yilaozhuang 的回复:
我会使用委托,我现在的程序也用到在线程中刷新标签。
看了你一你的代码,你的委托在哪里,在哪里,在哪里?
yilaozhuang 2016-02-17
  • 打赏
  • 举报
回复
引用 1 楼 xian_wwq 的回复:
从线程中进行UI操作,需要使用委托 具体网上搜 c# 委托
谢谢您的回复,我会使用委托,我现在的程序也用到在线程中刷新标签。 关于这个zedgraph的刷新,实在是不明白代码如何写,才来请教大神们。 您手里有没有这种zedgraph刷新的例子,给我参考一下
xian_wwq 2016-02-17
  • 打赏
  • 举报
回复
从线程中进行UI操作,需要使用委托 具体网上搜 c# 委托
xian_wwq 2016-02-17
  • 打赏
  • 举报
回复
引用 2 楼 yilaozhuang 的回复:
[quote=引用 1 楼 xian_wwq 的回复:] 从线程中进行UI操作,需要使用委托 具体网上搜 c# 委托
谢谢您的回复,我会使用委托,我现在的程序也用到在线程中刷新标签。 关于这个zedgraph的刷新,实在是不明白代码如何写,才来请教大神们。 您手里有没有这种zedgraph刷新的例子,给我参考一下[/quote] 同问,你会委托,那
引用 4 楼 yilaozhuang 的回复:
[quote=引用 3 楼 xdashewan 的回复:] [quote=引用 2 楼 yilaozhuang 的回复:] 我会使用委托,我现在的程序也用到在线程中刷新标签。
看了你一你的代码,你的委托在哪里,在哪里,在哪里?[/quote] zedgraph的委托程序实在不知道怎么写,我使用的委托是刷新主界面一个textbox的程序 private void SetTextBox_T13(double val) { if (textBox_T13.InvokeRequired == false) { textBox_T13.Text = val.ToString("F1"); } else { Delegate_SetTextBoxValue setbox = new Delegate_SetTextBoxValue(SetTextBox_T13); this.textBox_T13.Invoke(setbox, val); } } 文本框的操作很简单,我能明白怎么写,zedgraph的不知道从哪里下手写委托[/quote] 一样的道理呀,不过上面这个写法是2.0的, 可以采用匿名方法,简化下 this.Invoke(new Action(delegate() { textBox_T13.Text = val.ToString("F1"); }));

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧