c# - 向 DataPoint 添加太多点
问题描述
我正在创建 AddGraph 类和主机的对象。在我的 PingForm 类中,使用 AddNewHost(...) 这样的方法
public void AddNewHost(HostPinger host)
{
HostOptions dlg = new HostOptions();
if (dlg.ShowDialog(this, host) == DialogResult.OK)
{
bool exists = false;
lock (_hosts)
{
foreach (HostPinger hp in _hosts)
{
if (hp.HostIP != null && hp.HostIP == dlg.Host.HostIP)
{
exists = true;
break;
}
}
hostListPanels.Add(Convert.ToString(dlg.Host.HostIP));
source.AddGraph newGraph = new source.AddGraph();
graphList.Add(newGraph);
var createdPanel = newGraph.panelAdd(tableLayoutPanel1, Convert.ToString(dlg.Host.HostIP), hScrollBar1);
}
dlg.Host.Logger = DefaultLogger.Instance;
dlg.Host.OnPing += new OnPingDelegate(OnHostPing);
dlg.Host.OnStopPinging += new OnHostPingerCommandDelegate(hp_OnStopPinging);
dlg.Host.OnStartPinging += new OnHostPingerCommandDelegate(hp_OnStartPinging);
...
}
}
在每次 Ping 之后,在 PingForm 类中调用另一个方法,无效 OnHostPing()。现在在 OnHostPing() 中我调用 PlotData(),这个方法也在 PingForm 中。
public void PlotData(Chart chart)
{
unixTimestamp = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
double rvalue = R.Next(0, 20);
if (InvokeRequired)
{
Invoke(new NetPinger.source.AddGraph.ReturnChartDelegate(PlotData), new Object[] { chart });
}
else
{
int i = 0;
if (graphList[i].Name != chart.Name)
{
for (int x = 0; graphList[x].Name != chart.Name; x++)
{
i = x;
}
graphList[i].dataBuffer(unixTimestamp, rvalue);
}
else
{
graphList[i].dataBuffer(unixTimestamp, rvalue);
}
}
}
在我创建了多个主机之后,每个主机都有自己的面板,里面有一个图表。每个图表都在填充他自己的值,这是有效的。但是,如果我尝试单独填充每个 AddGraph 对象的缓冲区,它就不起作用,所有对象的时间戳和值一起写入所有缓冲区。所以假设我在缓冲区中有 host1: 19991 / 10, host2: 1999 / 12 的时间戳/值,host1 和 host2 的值都会有,但我希望每个 AddGraph 对象都有自己的缓冲区。缓冲区如下所示,位于 AddGraph 类中:
public void dataBuffer(double unixTimestamp, double roundTripTime)
{
if(counter != graphDataPoints.Length)
{
graphDataPoints[counter] = new DataPoint(unixTimestamp, roundTripTime);
counter++;
}
else
{
MessageBox.Show("buffer full.");
}
}
但正如在 UI 中看到的,每个图表都有自己的数据添加到图表中,而不是像缓冲区一样。我正在使用chart.Series[0].Points.AddXY(unixTimestamp, rvalue);
plotdata 方法将数据添加到图表中。
我希望以某种方式可以理解我的问题是什么以及我想要实现的目标。感谢帮助!
解决方案
推荐阅读
- javascript - 以网格布局显示使用 javascript 从 API 获取的信息
- swift - Swift 和 RAII:项目和游乐场之间的 deinit 行为不一致
- android - 在不挂起 UI 的情况下执行一系列耗时的 Android UI 更新
- reactjs - Javascript:预期结果。反应:“意外使用'name'无限制全局”
- android - 数据库插入失败时将 RetryWhen 添加到 Single
- r - 使用 R 中的 ggplotly 和 choroplethrZip 包修改 choropleth 地图的 hoverinfo 时显示错误
- dataframe - 如何在数据框中的行中以奇数或偶数为条件
- loops - 循环 ansible_host 卡在第一项上
- machine-learning - 使用 Caffe 进行培训时,文件列表应该排序吗?
- android - Android Studio Visual xml 编辑器不工作