大家好;上次我问了大家一个问题,就是在1ms通讯一次的前提下,如何使得界面刷新的时候,窗口控件不会死掉?
得到的答案是:用多线程或异步,我最终选择了异步,发现结果良好,可行,效果不错这次我想在加一个东西,就是有2个窗口,同时要刷新着1ms的数据(刷新的对象是一样的,只不过一个窗口以textbox来体现,另一个窗口以波形来体现)那么这样的话,怎么搞呢?我自己尝试了用2个异步,第一个异步就是刷新本窗口的textbox(数据在textbox的哪个窗口接收到),第二个异步中用了"this.invoke"委托给窗口2让窗口2刷新波形;这样的结果是,发现第一个异步刷新textbox还是很不错,
但是第二个异步刷新zedgraph的波形时,刚开始都很好,但是刷了大概1W的点左右时,窗口2(波形所在窗口全部死掉),而原来的textbox窗口依然完好无恙;请问这是为什么呢?是我的第二个异步的语句写的不对吗?(我是这么写的)
开始委托: Asyn_Oper_ObjectWave.BeginInvoke(new AsyncCallback(CallBackboxing), Asyn_Oper_ObjectWave);回调:public void CallBackboxing(IAsyncResult ar)
{
temp_testwave obj = (temp_testwave)ar.AsyncState;
try
{
obj.EndInvoke(ar);
}
catch
{
}
}最终执行的函数:
private void updateboxing()
{
this.Invoke(form2event, a, b, c, d, e, f);
}窗口2就是正常的zedgraph画图上面的写法是错误的吗?第二个委托给窗口2画波形的写法是不是有误?是不是不该在异步的函数中写"this.invoke"?还请高手指教了,我的目标就是上面写的,要两个不同的窗口同时1ms刷新数据,但现在只能流畅的实现一个,另外一个不行,小弟跪求指导谢谢了
得到的答案是:用多线程或异步,我最终选择了异步,发现结果良好,可行,效果不错这次我想在加一个东西,就是有2个窗口,同时要刷新着1ms的数据(刷新的对象是一样的,只不过一个窗口以textbox来体现,另一个窗口以波形来体现)那么这样的话,怎么搞呢?我自己尝试了用2个异步,第一个异步就是刷新本窗口的textbox(数据在textbox的哪个窗口接收到),第二个异步中用了"this.invoke"委托给窗口2让窗口2刷新波形;这样的结果是,发现第一个异步刷新textbox还是很不错,
但是第二个异步刷新zedgraph的波形时,刚开始都很好,但是刷了大概1W的点左右时,窗口2(波形所在窗口全部死掉),而原来的textbox窗口依然完好无恙;请问这是为什么呢?是我的第二个异步的语句写的不对吗?(我是这么写的)
开始委托: Asyn_Oper_ObjectWave.BeginInvoke(new AsyncCallback(CallBackboxing), Asyn_Oper_ObjectWave);回调:public void CallBackboxing(IAsyncResult ar)
{
temp_testwave obj = (temp_testwave)ar.AsyncState;
try
{
obj.EndInvoke(ar);
}
catch
{
}
}最终执行的函数:
private void updateboxing()
{
this.Invoke(form2event, a, b, c, d, e, f);
}窗口2就是正常的zedgraph画图上面的写法是错误的吗?第二个委托给窗口2画波形的写法是不是有误?是不是不该在异步的函数中写"this.invoke"?还请高手指教了,我的目标就是上面写的,要两个不同的窗口同时1ms刷新数据,但现在只能流畅的实现一个,另外一个不行,小弟跪求指导谢谢了
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货