在实时 Visual Basic 中绘制图表数据

Plotting Chart Data in Realtime Visual Basic

我正在处理一个 DevExpress Line Chart,我 运行 遇到了一个小问题。下面的代码是我个人 pinger 应用程序的一部分,作为我工作职责的一部分,我 ping 了很多设备,以测试连接是否在线并且速度是否合理。我试图让 ping 在折线图上可视化,但我使用下面的代码添加到图表中的每个值都没有相互连接。

但是,如果我取出注释代码 series1.Points.Add(New SeriesPoint(15, 50)) 所有 dots/data 点都连接到图表上的那个点......所以我认为它只是没有识别其他值连接到因为我要添加它们 separately/real-time。

有没有办法让图表连接到它最近的参数值?所以 Ping 1 点用一条线连接到 Ping 2 点。

Do While PingCounter <= 10
            'Increment Ping Counter
            PingCounter = PingCounter + 1

            'Ping and return values
            Dim ping As Ping = New Ping()
            Dim pingreply As PingReply = ping.Send(txtHost.Text)
            ListBox1.Items.Add("Ping ID: " & PingCounter.ToString)
            ListBox1.Items.Add("Address: " & pingreply.Address.ToString() & Constants.vbCr)
            ListBox1.Items.Add("Roundtrip Time: " & pingreply.RoundtripTime & Constants.vbCr)
            ListBox1.Items.Add("TTL (Time To Live): " & pingreply.Options.Ttl & Constants.vbCr)
            ListBox1.Items.Add("Buffer Size: " & pingreply.Buffer.Length.ToString() & Constants.vbCr)

            'Declare integer for ping time
            Dim TripTime As Integer = pingreply.RoundtripTime

            'Clear chart1
            'Chart1.Series.Clear()

            'Update chart with ping ID and Ping Time
            Dim series1 As New DevExpress.XtraCharts.Series("Realtime Ping", ViewType.Line)
            series1.Points.Add(New SeriesPoint(PingCounter, TripTime))
            'series1.Points.Add(New SeriesPoint(15, 50))

            Chart1.CrosshairOptions.HighlightPoints = True
            Chart1.CrosshairOptions.ShowValueLine = True
            CType(series1.View, LineSeriesView).LineStyle.DashStyle = DashStyle.Solid

            ' Add the series to the chart.
            Chart1.Series.Add(series1)
            My.Application.DoEvents()
        Loop

这只是 prototyle/proof 的概念代码,显然需要后台工作人员进行大量整理。

您正在将每个点作为不同的系列添加到图表中。在循环外声明并添加一个系列,然后向其添加点。

Dim series1 As New DevExpress.XtraCharts.Series("Realtime Ping", ViewType.Line)
Chart1.Series.Add(series1)
CType(series1.View, LineSeriesView).LineStyle.DashStyle = DashStyle.Solid
Chart1.CrosshairOptions.HighlightPoints = True
Chart1.CrosshairOptions.ShowValueLine = True
Do While PingCounter <= 10
    'Increment Ping Counter
    PingCounter = PingCounter + 1

    'Ping and return values
    Dim ping As Ping = New Ping()
    Dim pingreply As PingReply = ping.Send(txtHost.Text)
    ListBox1.Items.Add("Ping ID: " & PingCounter.ToString)
    ListBox1.Items.Add("Address: " & pingreply.Address.ToString() & Constants.vbCr)
    ListBox1.Items.Add("Roundtrip Time: " & pingreply.RoundtripTime & Constants.vbCr)
    ListBox1.Items.Add("TTL (Time To Live): " & pingreply.Options.Ttl & Constants.vbCr)
    ListBox1.Items.Add("Buffer Size: " & pingreply.Buffer.Length.ToString() & Constants.vbCr)

    'Declare integer for ping time
    Dim TripTime As Integer = pingreply.RoundtripTime


    'Update chart with ping ID and Ping Time

    series1.Points.Add(New SeriesPoint(PingCounter, TripTime))

    My.Application.DoEvents()
Loop

一个系列中的所有点都已连接。例如,如果您想要在同一图表中以不同颜色绘制其他数据,则可以使用多个系列。因此,如果在您的代码中取消注释您提到的行,则每个系列包含两个连接的点(一个点始终具有相同的值)。你想要的是一个系列中的所有点。