Option Strict Off
Option Explicit On
Imports System.Windows.Forms.DataVisualization.Charting
Public Class frmDataDisplay
Inherits System.Windows.Forms.Form
Dim elapsed As New Stopwatch
Dim elapsedTime As Long = 0
Friend WithEvents BackgroundWorker1 As System.ComponentModel.BackgroundWorker
Friend WithEvents Chart1 As System.Windows.Forms.DataVisualization.Charting.Chart
Private Sub cmdStartConvert_Click(ByVal eventSender As System.Object, _
ByVal eventArgs As System.EventArgs) Handles cmdStartConvert.Click
Dim i As Single
Dim ser As Series
cmdStopConvert.Enabled = False
For Each ser In Chart1.Series
ser.Points.Clear()
Next
Chart1.Titles("Title1").Text = "600 RPM Parking Curve"
Chart1.ChartAreas("ChartArea1").AxisX.Title = "BAR"
Chart1.ChartAreas("ChartArea1").AxisY.Title = "LPM"
Chart1.ChartAreas("ChartArea1").AxisY2.Title = "N*m"
Chart1.ChartAreas("ChartArea1").AxisX.Interval = 10
Chart1.Series("Series1").Points.AddXY(69, 15)
Chart1.Series("Series1").Points.AddXY(175, 13)
Chart1.Series("Series1").Points.AddXY(195, 13)
Chart1.Series("Series1").Points.AddXY(195, 1)
Chart1.Series("Series2").Points.AddXY(69, 10.8)
Chart1.Series("Series2").Points.AddXY(175, 8)
Chart1.Series("Series2").Points.AddXY(175, -0.1)
Chart1.Series("Series2").Points.AddXY(200, -0.1)
Chart1.Series("Series4").Points.AddXY(69, 45)
Chart1.Series("Series4").Points.AddXY(200, 94)
Chart1.Series("Series5").Points.AddXY(69, 16)
Chart1.Series("Series5").Points.AddXY(200, 56)
'comment out this line if using the loop below
BackgroundWorker1.RunWorkerAsync()
'comment out the following loop if running the BGW above
'i = 65
'Do
' elapsed.Start()
' i = i + 0.2
' Chart1.Series("Series0").Points.AddXY(i, MakeSineWave(i))
' Application.DoEvents()
' elapsed.Stop()
' elapsedTime = elapsed.ElapsedMilliseconds
' elapsed.Reset()
' Console.WriteLine(CStr(i) & ":" & CStr(elapsedTime))
'Loop Until (i > 200)
cmdStopConvert.Enabled = True
End Sub
Private Sub cmdStopConvert_Click(ByVal eventSender As System.Object, _
ByVal eventArgs As System.EventArgs) Handles cmdStopConvert.Click
Application.Exit()
End Sub
Function MakeSineWave(radians As Single) As Single
Return 3 * Math.Sin(radians) + 6
End Function
Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Dim worker As System.ComponentModel.BackgroundWorker = DirectCast(sender, System.ComponentModel.BackgroundWorker)
Dim i As Single
Dim GraphData(1, 1) As Single
i = 65
Do
elapsed.Start()
i = i + 0.2
GraphData(0, 0) = i
GraphData(1, 0) = MakeSineWave(i)
Threading.Thread.Sleep(30)
worker.ReportProgress(0, GraphData)
'Application.DoEvents()
'Threading.Thread.Sleep(20)
elapsed.Stop()
elapsedTime = elapsed.ElapsedMilliseconds
elapsed.Reset()
Console.WriteLine(CStr(i) & ":" & CStr(elapsedTime))
Loop Until i > 200
End Sub
Private Sub BackgroundWorker1_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
Dim GraphData(,) As Single = CType(e.UserState, Single(,))
Console.WriteLine("Added point at: " & CStr(GraphData(0, 0)))
Chart1.Series("Series0").Points.AddXY(GraphData(0, 0), GraphData(1, 0))
End Sub
Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
MessageBox.Show("Now you can process the data")
End Sub
End Class