VB.Net Tutorial/GUI Applications/Chart
Содержание
Char CPU and Memory
<source lang="vbnet">"Sams Teach Yourself Visual Basic .NET in 21 Days "By Lowell Mauer "Published 2001 "Sams Publishing "ISBN 0672322714
Imports System.Windows.Forms Imports System.Drawing Imports System.Drawing.Drawing2D public class CharCPUMemory
public Shared Sub Main Application.Run(New frmMain) End Sub
End class
Public Class frmMain
Inherits System.Windows.Forms.Form Dim m_sngX As Single Dim m_sngY As Single Dim m_sngCPUY As Single Dim m_sngProcsY As Single Dim m_sngMemY As Single Dim penCPU As New System.Drawing.Pen(Color.Red) Dim penProcs As New System.Drawing.Pen(Color.Green) Dim penMem As New System.Drawing.Pen(Color.Blue) Dim penFore As New System.Drawing.Pen(SystemColors.WindowText) Dim penBack As New System.Drawing.Pen(SystemColors.Control) Dim MachineName As String = System.Windows.Forms.SystemInformation.ruputerName Const INCREMENT As Single = 1
- Region " Windows Form Designer generated code "
Public Sub New() MyBase.New() "This call is required by the Windows Form Designer. InitializeComponent() "Add any initialization after the InitializeComponent() call End Sub "Form overrides dispose to clean up the component list. Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then If Not (components Is Nothing) Then components.Dispose() End If End If MyBase.Dispose(disposing) End Sub Friend WithEvents pnlSweep As System.Windows.Forms.Panel Friend WithEvents cmdSweep As System.Windows.Forms.Button Friend WithEvents trkSpeed As System.Windows.Forms.TrackBar Friend WithEvents lblCPU As System.Windows.Forms.Label Friend WithEvents lblProc As System.Windows.Forms.Label Friend WithEvents lblMem As System.Windows.Forms.Label Friend WithEvents tmrClock As System.Windows.Forms.Timer
- Region "Declaration of Performance counters"
Friend WithEvents prfCPU As System.Diagnostics.PerformanceCounter Friend WithEvents prfProcs As System.Diagnostics.PerformanceCounter Friend WithEvents prfMem As System.Diagnostics.PerformanceCounter
- End Region
Friend WithEvents logApp As System.Diagnostics.EventLog Private components As System.ruponentModel.IContainer "Required by the Windows Form Designer "NOTE: The following procedure is required by the Windows Form Designer "It can be modified using the Windows Form Designer. "Do not modify it using the code editor. <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() Me.ruponents = New System.ruponentModel.Container() Me.prfCPU = New System.Diagnostics.PerformanceCounter() Me.pnlSweep = New System.Windows.Forms.Panel() Me.tmrClock = New System.Windows.Forms.Timer(Me.ruponents) Me.trkSpeed = New System.Windows.Forms.TrackBar() Me.lblProc = New System.Windows.Forms.Label() Me.prfProcs = New System.Diagnostics.PerformanceCounter() Me.lblMem = New System.Windows.Forms.Label() Me.prfMem = New System.Diagnostics.PerformanceCounter() Me.lblCPU = New System.Windows.Forms.Label() Me.cmdSweep = New System.Windows.Forms.Button() Me.logApp = New System.Diagnostics.EventLog() CType(Me.prfCPU, System.ruponentModel.ISupportInitialize).BeginInit() CType(Me.trkSpeed, System.ruponentModel.ISupportInitialize).BeginInit() CType(Me.prfProcs, System.ruponentModel.ISupportInitialize).BeginInit() CType(Me.prfMem, System.ruponentModel.ISupportInitialize).BeginInit() CType(Me.logApp, System.ruponentModel.ISupportInitialize).BeginInit() Me.SuspendLayout() "***Initializing Performance Counters" " "prfCPU " Me.prfCPU.CategoryName = "Processor" Me.prfCPU.CounterName = "% Processor Time" Me.prfCPU.InstanceName = "_Total" Me.prfCPU.MachineName = MachineName " "prfProcs " Me.prfProcs.CategoryName = "System" Me.prfProcs.CounterName = "Processes" Me.prfProcs.MachineName = MachineName " "prfMem " Me.prfMem.CategoryName = "Memory" Me.prfMem.CounterName = "Committed Bytes" Me.prfMem.MachineName = MachineName " "pnlSweep " Me.pnlSweep.Dock = System.Windows.Forms.DockStyle.Top Me.pnlSweep.Name = "pnlSweep" Me.pnlSweep.Size = New System.Drawing.Size(472, 240) Me.pnlSweep.TabIndex = 0 " "tmrClock " Me.tmrClock.Interval = 1000 " "trkSpeed " Me.trkSpeed.Location = New System.Drawing.Point(8, 280) Me.trkSpeed.Maximum = 20 Me.trkSpeed.Minimum = 1 Me.trkSpeed.Name = "trkSpeed" Me.trkSpeed.TabIndex = 2 Me.trkSpeed.Value = 10 " "lblProc " Me.lblProc.AutoSize = True Me.lblProc.ForeColor = System.Drawing.Color.Green Me.lblProc.Location = New System.Drawing.Point(240, 272) Me.lblProc.Name = "lblProc" Me.lblProc.Size = New System.Drawing.Size(60, 13) Me.lblProc.TabIndex = 3 Me.lblProc.Text = "Processes:" " "lblMem " Me.lblMem.AutoSize = True Me.lblMem.ForeColor = System.Drawing.Color.Blue Me.lblMem.Location = New System.Drawing.Point(240, 296) Me.lblMem.Name = "lblMem" Me.lblMem.Size = New System.Drawing.Size(48, 13) Me.lblMem.TabIndex = 3 Me.lblMem.Text = "Memory:" " "lblCPU " Me.lblCPU.AutoSize = True Me.lblCPU.ForeColor = System.Drawing.Color.Red Me.lblCPU.Location = New System.Drawing.Point(240, 248) Me.lblCPU.Name = "lblCPU" Me.lblCPU.Size = New System.Drawing.Size(31, 13) Me.lblCPU.TabIndex = 3 Me.lblCPU.Text = "CPU:" " "cmdSweep " Me.cmdSweep.Location = New System.Drawing.Point(8, 248) Me.cmdSweep.Name = "cmdSweep" Me.cmdSweep.Size = New System.Drawing.Size(64, 24) Me.cmdSweep.TabIndex = 1 Me.cmdSweep.Text = "&Start" " "logApp " Me.logApp.Log = "Application" Me.logApp.MachineName = MachineName Me.logApp.Source = "PerfLite" Me.logApp.SynchronizingObject = Me " "frmMain " Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) Me.ClientSize = New System.Drawing.Size(472, 333) Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.lblCPU, Me.trkSpeed, Me.cmdSweep, Me.pnlSweep, Me.lblProc, Me.lblMem}) Me.Name = "frmMain" Me.Text = "PerfLite" CType(Me.prfCPU, System.ruponentModel.ISupportInitialize).EndInit() CType(Me.trkSpeed, System.ruponentModel.ISupportInitialize).EndInit() CType(Me.prfProcs, System.ruponentModel.ISupportInitialize).EndInit() CType(Me.prfMem, System.ruponentModel.ISupportInitialize).EndInit() CType(Me.logApp, System.ruponentModel.ISupportInitialize).EndInit() Me.ResumeLayout(False) End Sub
- End Region
Private Sub tmrClock_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrClock.Tick Dim sngCPU As Single = prfCPU.NextValue() / 100 Dim sngProcs As Single = prfProcs.NextValue() Dim sngMem As Single = prfMem.NextValue / 1024 "draw the sweep panel DrawSweep(sngCPU, sngProcs, sngMem) "update the labels lblCPU.Text = "CPU: " & sngCPU.ToString("p") lblProc.Text = "Processes: " & sngProcs lblMem.Text = "Memory: " & sngMem.ToString("f0") & "KB" End Sub Private Sub DrawSweep(ByVal CPU As Single, _ ByVal Processes As Single, _ ByVal Memory As Single) Dim oGrafix As Graphics = pnlSweep.CreateGraphics() Dim sngHeight As Single = pnlSweep.Height "for the points Dim sngCPUY As Single Dim sngProcsY As Single Dim sngMemY As Single "erase previous sweep line oGrafix.DrawLine(penBack, m_sngX, 0, m_sngX, sngHeight) "draw data points sngCPUY = sngHeight - (CPU * sngHeight) - 1 oGrafix.DrawLine(penCPU, _ m_sngX - INCREMENT, m_sngCPUY, m_sngX, sngCPUY) m_sngCPUY = sngCPUY sngProcsY = sngHeight - Processes oGrafix.DrawLine(penProcs, _ m_sngX - INCREMENT, m_sngProcsY, m_sngX, sngProcsY) m_sngProcsY = sngProcsY "the 10000 is for my machine, to get the memory to a nice value " you may need to change it if the memory line " isn"t drawing correctly sngMemY = sngHeight - (Memory / 10000) oGrafix.DrawLine(penMem, _ m_sngX - INCREMENT, m_sngMemY, m_sngX, sngMemY) m_sngMemY = sngMemY "increment x m_sngX += INCREMENT If m_sngX > pnlSweep.Width Then "reset back to start m_sngX = 0 "and clear the drawing surface oGrafix.Clear(SystemColors.Control) End If "draw new line oGrafix.DrawLine(penFore, m_sngX, 0, m_sngX, sngHeight) End Sub Private Sub cmdSweep_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSweep.Click "Toggle the button text and timer (on or off) If cmdSweep.Text = "&Start" Then cmdSweep.Text = "&Stop" tmrClock.Enabled = True Else cmdSweep.Text = "&Start" tmrClock.Enabled = False End If End Sub Private Sub trkSpeed_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles trkSpeed.Scroll Dim iValue As Integer iValue = CInt(trkSpeed.Value) "set the timer interval to the selected time tmrClock.Interval = iValue * 100 "ms End Sub
End Class</source>
Custom Chart
<source lang="vbnet">" Quote from "Visual Basic 2005 Cookbook Solutions for VB 2005 Programmers "by Tim Patrick (Author), John Craig (Author) "# Publisher: O"Reilly Media, Inc. (September 21, 2006) "# Language: English "# ISBN-10: 0596101775 "# ISBN-13: 978-0596101770
Imports System.Drawing Imports System.Drawing.Drawing2D Imports System.Windows.Forms public class CustomChart
public Shared Sub Main Application.Run(New Form1) End Sub
End class
Public Class Form1
Private Sub Form1_Paint(ByVal sender As Object, _ ByVal e As System.Windows.Forms.PaintEventArgs) _ Handles Me.Paint " ----- Draw a nice chart. Dim canvas As Graphics = e.Graphics " ----- Create an array of data points to plot. Dim chartData() As Single = _ {20, 33, 44, 25, 17, 24, 63, 75, 54, 33} " ----- Create some pens. Dim penRed As New Pen(Color.Red, -1) Dim penBlack As New Pen(Color.Black, -1) Dim penShadow As New Pen(Color.Gray, -1) " ----- Prepare to add labels. Dim labelFont As New Font("Arial", 3, FontStyle.Regular) Dim labelBrush As New SolidBrush(Color.Blue) " ----- Used to plot the various elements. Dim x1, y1 As Single "Lower left corner Dim x2, y2 As Single "Upper right corner Dim scaleX, scaleY As Single Dim xScan, yScan As Single Dim oneBar As RectangleF " ----- Set the scaling. x1 = -10 y1 = -10 x2 = 110 y2 = 110 scaleX = Me.ClientSize.Width / (x2 - x1) scaleY = Me.ClientSize.Height / (y2 - y1) canvas.ScaleTransform(scaleX, -scaleY) "(inverted) canvas.TranslateTransform(-x1, -y2) "(inverted) " ----- Color the background. canvas.Clear(Color.Cornsilk) " ----- Draw chart outline rectangle. canvas.DrawRectangle(penBlack, New Rectangle(0, 0, 100, 100)) " ----- Draw the chart grid. For xScan = 10 To 90 Step 10 canvas.DrawLine(penBlack, xScan, 0, xScan, 100) Next xScan For yScan = 10 To 90 Step 10 canvas.DrawLine(penBlack, 0, yScan, 100, yScan) Next yScan " ----- Draw some shadowed bars. For xScan = 0 To 90 Step 10 " ----- Draw the shadow first. oneBar.X = xScan + 0.6 oneBar.Y = 0 oneBar.Width = 6 oneBar.Height = chartData(xScan \ 10) - 2 canvas.FillRectangle(New SolidBrush(Color.FromArgb(127, _ Color.Gray)), oneBar) " ----- Now draw the bar in front. oneBar.X = xScan + 2 oneBar.Y = 0 oneBar.Height = chartData(xScan \ 10) canvas.FillRectangle(New SolidBrush(Color.Red), oneBar) Next xScan " ----- Need to un-invert the scaling so text labels are " right-side-up. canvas.ResetTransform() canvas.ScaleTransform(scaleX, scaleY) canvas.TranslateTransform(-x1, -y1) " ----- Label the Y axis. For yScan = 0 To 100 Step 10 canvas.DrawString(yScan.ToString, labelFont, labelBrush, _ -2 * yScan.ToString.Length - 3, 97 - yScan) Next yScan " ----- Label the X axis For xScan = 0 To 100 Step 10 canvas.DrawString(xScan.ToString, labelFont, labelBrush, _ xScan + 1.7 - 2 * xScan.ToString.Length, 103) Next xScan " ----- Cleanup. labelFont.Dispose() labelBrush.Dispose() penRed.Dispose() penBlack.Dispose() penShadow.Dispose() canvas = Nothing End Sub Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize " ----- Refresh on resize. Me.Refresh() End Sub
End Class
<Global.Microsoft.VisualBasic.rupilerServices.DesignerGenerated()> _ Partial Class Form1
Inherits System.Windows.Forms.Form "Form overrides dispose to clean up the component list. <System.Diagnostics.DebuggerNonUserCode()> _ Protected Overrides Sub Dispose(ByVal disposing As Boolean) If disposing AndAlso components IsNot Nothing Then components.Dispose() End If MyBase.Dispose(disposing) End Sub "Required by the Windows Form Designer Private components As System.ruponentModel.IContainer "NOTE: The following procedure is required by the Windows Form Designer "It can be modified using the Windows Form Designer. "Do not modify it using the code editor. <System.Diagnostics.DebuggerStepThrough()> _ Private Sub InitializeComponent() Me.SuspendLayout() " "Form1 " Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.ClientSize = New System.Drawing.Size(549, 394) Me.DoubleBuffered = True Me.Name = "Form1" Me.Text = "Drawing a Simple Chart" Me.ResumeLayout(False) End Sub
End Class</source>
GDI+ Line Chart
<source lang="vbnet">Imports System Imports System.Drawing Imports System.Collections Imports System.ruponentModel Imports System.Windows.Forms Imports System.Data Imports System.Drawing.Drawing2D public class DrawCoordinate
public Shared Sub Main Application.Run(New Form1) End Sub
End class Public Class Form1
Inherits System.Windows.Forms.Form Private startPoint As New Point(50, 217) Private endPoint As New Point(50, 217) Public Sub New() MyBase.New() InitializeComponent() End Sub Private components As System.ruponentModel.IContainer Friend WithEvents Button1 As System.Windows.Forms.Button Friend WithEvents CheckBox1 As System.Windows.Forms.CheckBox <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() Me.Button1 = New System.Windows.Forms.Button Me.CheckBox1 = New System.Windows.Forms.CheckBox Me.SuspendLayout() " "Button1 " Me.Button1.BackColor = System.Drawing.SystemColors.Desktop Me.Button1.Location = New System.Drawing.Point(352, 16) Me.Button1.Name = "Button1" Me.Button1.Size = New System.Drawing.Size(96, 24) Me.Button1.TabIndex = 0 Me.Button1.Text = "Clear All" " "CheckBox1 " Me.CheckBox1.Location = New System.Drawing.Point(352, 56) Me.CheckBox1.Name = "CheckBox1" Me.CheckBox1.TabIndex = 1 Me.CheckBox1.Text = "Rectangle" " "Form1 " Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) Me.BackColor = System.Drawing.SystemColors.ActiveCaptionText Me.ClientSize = New System.Drawing.Size(480, 317) Me.Controls.Add(Me.CheckBox1) Me.Controls.Add(Me.Button1) Me.Text = "" Me.ResumeLayout(False) End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click startPoint.X = 50 startPoint.Y = 217 endPoint.X = 50 endPoint.Y = 217 Me.Invalidate(Me.ClientRectangle) End Sub Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs) If e.Button = MouseButtons.Left Then Dim g1 As Graphics = Me.CreateGraphics() Dim linePen As New Pen(Color.Green, 1) Dim ellipsePen As New Pen(Color.Red, 1) startPoint = endPoint endPoint = New Point(e.X, e.Y) g1.DrawLine(linePen, startPoint, endPoint) If checkBox1.Checked Then g1.DrawRectangle(ellipsePen, e.X - 2, e.Y - 2, 4, 4) Else g1.DrawEllipse(ellipsePen, e.X - 2, e.Y - 2, 4, 4) End If linePen.Dispose() ellipsePen.Dispose() g1.Dispose() End If End Sub Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs) Dim g As Graphics = e.Graphics Dim vertFont As New Font("Verdana", 10, FontStyle.Bold) Dim horzFont As New Font("Verdana", 10, FontStyle.Bold) Dim vertBrush As New SolidBrush(Color.Black) Dim horzBrush As New SolidBrush(Color.Blue) Dim blackPen As New Pen(Color.Black, 2) Dim bluePen As New Pen(Color.Blue, 2) " Drawing a vertical and a horizontal line g.DrawLine(blackPen, 50, 220, 50, 25) g.DrawLine(bluePen, 50, 220, 250, 220) "X axis drawing g.DrawString("0", horzFont, horzBrush, 30, 220) g.DrawString("1", horzFont, horzBrush, 50, 220) g.DrawString("2", horzFont, horzBrush, 70, 220) g.DrawString("3", horzFont, horzBrush, 90, 220) g.DrawString("4", horzFont, horzBrush, 110, 220) g.DrawString("5", horzFont, horzBrush, 130, 220) g.DrawString("6", horzFont, horzBrush, 150, 220) g.DrawString("7", horzFont, horzBrush, 170, 220) g.DrawString("8", horzFont, horzBrush, 190, 220) g.DrawString("9", horzFont, horzBrush, 210, 220) g.DrawString("10", horzFont, horzBrush, 230, 220) " Drawing vertical strings Dim vertStrFormat As New StringFormat vertStrFormat.FormatFlags = StringFormatFlags.DirectionVertical g.DrawString("-", horzFont, horzBrush, 50, 212, vertStrFormat) g.DrawString("-", horzFont, horzBrush, 70, 212, vertStrFormat) g.DrawString("-", horzFont, horzBrush, 90, 212, vertStrFormat) g.DrawString("-", horzFont, horzBrush, 110, 212, vertStrFormat) g.DrawString("-", horzFont, horzBrush, 130, 212, vertStrFormat) g.DrawString("-", horzFont, horzBrush, 150, 212, vertStrFormat) g.DrawString("-", horzFont, horzBrush, 170, 212, vertStrFormat) g.DrawString("-", horzFont, horzBrush, 190, 212, vertStrFormat) g.DrawString("-", horzFont, horzBrush, 210, 212, vertStrFormat) g.DrawString("-", horzFont, horzBrush, 230, 212, vertStrFormat) "Y axis drawing g.DrawString("100-", vertFont, vertBrush, 20, 20) g.DrawString("90 -", vertFont, vertBrush, 25, 40) g.DrawString("80 -", vertFont, vertBrush, 25, 60) g.DrawString("70 -", vertFont, vertBrush, 25, 80) g.DrawString("60 -", vertFont, vertBrush, 25, 100) g.DrawString("50 -", vertFont, vertBrush, 25, 120) g.DrawString("40 -", vertFont, vertBrush, 25, 140) g.DrawString("30 -", vertFont, vertBrush, 25, 160) g.DrawString("20 -", vertFont, vertBrush, 25, 180) g.DrawString("10 -", vertFont, vertBrush, 25, 200) " Dispose vertFont.Dispose() horzFont.Dispose() vertBrush.Dispose() horzBrush.Dispose() blackPen.Dispose() bluePen.Dispose() End Sub
End Class</source>
Performance Monitor
<source lang="vbnet">Imports System.Collections Imports System.Diagnostics Imports System.Windows.Forms public class PerformanceMonitor
public Shared Sub Main Application.Run(New Form1) End Sub
End class Public Class Form1
Inherits System.Windows.Forms.Form
- Region " Windows Form Designer generated code "
Public Sub New() MyBase.New() "This call is required by the Windows Form Designer. InitializeComponent() "Add any initialization after the InitializeComponent() call End Sub "Form overrides dispose to clean up the component list. Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then If Not (components Is Nothing) Then components.Dispose() End If End If MyBase.Dispose(disposing) End Sub "Required by the Windows Form Designer Private components As System.ruponentModel.IContainer "NOTE: The following procedure is required by the Windows Form Designer "It can be modified using the Windows Form Designer. "Do not modify it using the code editor. Friend WithEvents ObjectListBox As System.Windows.Forms.ListBox Friend WithEvents CounterListBox As System.Windows.Forms.ListBox Friend WithEvents Label1 As System.Windows.Forms.Label Friend WithEvents Label2 As System.Windows.Forms.Label Friend WithEvents InstanceListBox As System.Windows.Forms.ListBox Friend WithEvents Label3 As System.Windows.Forms.Label Friend WithEvents CounterValueTextBox As System.Windows.Forms.TextBox Friend WithEvents CounterValueLabel As System.Windows.Forms.Label <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() Me.ObjectListBox = New System.Windows.Forms.ListBox() Me.CounterListBox = New System.Windows.Forms.ListBox() Me.Label1 = New System.Windows.Forms.Label() Me.Label2 = New System.Windows.Forms.Label() Me.InstanceListBox = New System.Windows.Forms.ListBox() Me.Label3 = New System.Windows.Forms.Label() Me.CounterValueTextBox = New System.Windows.Forms.TextBox() Me.CounterValueLabel = New System.Windows.Forms.Label() Me.SuspendLayout() " "ObjectListBox " Me.ObjectListBox.Location = New System.Drawing.Point(16, 48) Me.ObjectListBox.Name = "ObjectListBox" Me.ObjectListBox.Size = New System.Drawing.Size(176, 134) Me.ObjectListBox.Sorted = True Me.ObjectListBox.TabIndex = 0 " "CounterListBox " Me.CounterListBox.Location = New System.Drawing.Point(16, 208) Me.CounterListBox.Name = "CounterListBox" Me.CounterListBox.Size = New System.Drawing.Size(424, 134) Me.CounterListBox.TabIndex = 1 " "Label1 " Me.Label1.AutoSize = True Me.Label1.Location = New System.Drawing.Point(16, 32) Me.Label1.Name = "Label1" Me.Label1.Size = New System.Drawing.Size(111, 13) Me.Label1.TabIndex = 2 Me.Label1.Text = "Performance Objects" " "Label2 " Me.Label2.AutoSize = True Me.Label2.Location = New System.Drawing.Point(16, 192) Me.Label2.Name = "Label2" Me.Label2.Size = New System.Drawing.Size(118, 13) Me.Label2.TabIndex = 3 Me.Label2.Text = "Performance Counters" " "InstanceListBox " Me.InstanceListBox.Location = New System.Drawing.Point(240, 48) Me.InstanceListBox.Name = "InstanceListBox" Me.InstanceListBox.Size = New System.Drawing.Size(200, 134) Me.InstanceListBox.TabIndex = 4 " "Label3 " Me.Label3.AutoSize = True Me.Label3.Location = New System.Drawing.Point(240, 32) Me.Label3.Name = "Label3" Me.Label3.Size = New System.Drawing.Size(88, 13) Me.Label3.TabIndex = 5 Me.Label3.Text = "Instance Objects" " "CounterValueTextBox " Me.CounterValueTextBox.Location = New System.Drawing.Point(128, 360) Me.CounterValueTextBox.Name = "CounterValueTextBox" Me.CounterValueTextBox.Size = New System.Drawing.Size(312, 20) Me.CounterValueTextBox.TabIndex = 6 Me.CounterValueTextBox.Text = "" Me.CounterValueTextBox.TextAlign = System.Windows.Forms.HorizontalAlignment.Right " "CounterValueLabel " Me.CounterValueLabel.AutoSize = True Me.CounterValueLabel.Location = New System.Drawing.Point(16, 360) Me.CounterValueLabel.Name = "CounterValueLabel" Me.CounterValueLabel.Size = New System.Drawing.Size(62, 13) Me.CounterValueLabel.TabIndex = 7 Me.CounterValueLabel.Text = "Raw Value:" " "Form1 " Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) Me.ClientSize = New System.Drawing.Size(456, 469) Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.CounterValueLabel, Me.CounterValueTextBox, Me.Label3, Me.InstanceListBox, Me.Label2, Me.Label1, Me.CounterListBox, Me.ObjectListBox}) Me.Name = "Form1" Me.Text = "Performance1 - System.Diagnostiocs Performance Objects" Me.ResumeLayout(False) End Sub
- End Region
Private counters As New ArrayList() Private counter As New PerformanceCounter() Private cat As New PerformanceCounterCategory() Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim categories As PerformanceCounterCategory() ObjectListBox.Sorted = True ObjectListBox.Items.Clear() categories = PerformanceCounterCategory.GetCategories Dim i As Integer For i = 0 To categories.Length - 1 ObjectListBox.Items.Add(categories(i).CategoryName) Next End Sub Private Sub ObjectListBox_SelectedIndexChanged(ByVal sender _ As System.Object, ByVal e As System.EventArgs) _ Handles ObjectListBox.SelectedIndexChanged InstanceListBox.Items.Clear() CounterListBox.Items.Clear() Dim i As Integer Dim instances() As String cat = New PerformanceCounterCategory( _ ObjectListBox.SelectedItem.ToString()) Try instances = cat.GetInstanceNames() If instances.Length = 0 Then "There are no instances for this object Dim counter As New PerformanceCounter() For Each counter In cat.GetCounters() CounterListBox.Items.Add(counter.CounterName) Next Else "There ARE instances for this object so fill instanceListBox For i = 0 To instances.Length - 1 InstanceListBox.Items.Add(instances(i).ToString()) Next End If Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub Private Sub InstanceListBox_SelectedIndexChanged( _ ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles InstanceListBox.SelectedIndexChanged CounterListBox.Items.Clear() cat = New PerformanceCounterCategory(ObjectListBox.SelectedItem.ToString()) CounterListBox.Items.Clear() Dim i As Integer counters.AddRange(cat.GetCounters(InstanceListBox.SelectedItem.ToString())) For Each counter In counters CounterListBox.Items.Add(counter.CounterName) Next End Sub
Private Sub CounterListBox_SelectedIndexChanged(ByVal sender _ As System.Object, ByVal e As System.EventArgs) _ Handles CounterListBox.SelectedIndexChanged Me.CounterValueTextBox.Text = CType(counters(CounterListBox.SelectedIndex), _ PerformanceCounter).RawValue.ToString() End Sub
End Class</source>
Thread Graph
<source lang="vbnet">"Visual Basic 2005 Programmer"s Reference "by Rod Stephens (Author) "# Publisher: Wrox (October 21, 2005) "# Language: English "# ISBN-10: 0764571982 "# ISBN-13: 978-0764571985
Imports System.Drawing Imports System.Windows.Forms Imports System.Math Imports System.Threading public class ThreadGraph
public Shared Sub Main Application.Run(New Form1) End Sub
End class
Public Class Form1
Private m_Ymid As Integer Private m_Y As Integer Private Const GRID_STEP As Integer = 40 Private m_GraphThread As Thread " Get ready. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load m_Ymid = picGraph.ClientSize.Height \ 2 m_Y = m_Ymid " Make the Bitmap and Graphics objects. Dim wid As Integer = picGraph.ClientSize.Width Dim hgt As Integer = picGraph.ClientSize.Height Dim bm As New Bitmap(wid, hgt) Dim gr As Graphics = Graphics.FromImage(bm) " Draw guide lines. gr.Clear(Color.Blue) For i As Integer = m_Ymid To picGraph.ClientSize.Height Step GRID_STEP gr.DrawLine(Pens.LightBlue, 0, i, wid - 1, i) Next i For i As Integer = m_Ymid To 0 Step -GRID_STEP gr.DrawLine(Pens.LightBlue, 0, i, wid - 1, i) Next i picGraph.Image = bm End Sub " Start drawing the graph. Private Sub btnGraph_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGraph.Click If m_GraphThread Is Nothing Then " The thread isn"t running. Start it. AddStatus("Starting thread") m_GraphThread = New Thread(AddressOf DrawGraph) m_GraphThread.Priority = ThreadPriority.BelowNormal m_GraphThread.IsBackground = True m_GraphThread.Start() AddStatus("Thread started") btnGraph.Text = "Stop" Else " The thread is running. Stop it. AddStatus("Stopping thread") m_GraphThread.Abort() " m_GraphThread.Join() m_GraphThread = Nothing AddStatus("Thread stopped") btnGraph.Text = "Start" End If End Sub " Draw a graph until stopped. Private Sub DrawGraph() Try " Generate pseudo-random values. Dim y As Integer = m_Y Do " Generate the next value. NewValue() " Plot the new value. PlotValue(y, m_Y) y = m_Y Loop Catch ex As Exception AddStatus("[Thread] " & ex.Message) End Try End Sub " Generate the next value. Private Sub NewValue() " Delay a bit before calculating the value. Dim stop_time As Date = Now.AddMilliseconds(20) Do While Now < stop_time Loop " Calculate the next value. Static rnd As New Random m_Y += rnd.Next(-4, 5) If m_Y < 0 Then m_Y = 0 If m_Y >= picGraph.ClientSize.Height - 1 Then m_Y = picGraph.ClientSize.Height - 1 End Sub " Plot a new value. Private Delegate Sub PlotValueDelegate(ByVal old_y As Integer, ByVal new_y As Integer) Private Sub PlotValue(ByVal old_y As Integer, ByVal new_y As Integer) " See if we"re on the worker thread and thus " need to invoke the main UI thread. If Me.InvokeRequired Then " Make arguments for the delegate. Dim args As Object() = {old_y, new_y} " Make the delegate. Dim plot_value_delegate As PlotValueDelegate plot_value_delegate = AddressOf PlotValue " Invoke the delegate on the main UI thread. Me.Invoke(plot_value_delegate, args) " We"re done. Exit Sub End If " Make the Bitmap and Graphics objects. Dim wid As Integer = picGraph.ClientSize.Width Dim hgt As Integer = picGraph.ClientSize.Height Dim bm As New Bitmap(wid, hgt) Dim gr As Graphics = Graphics.FromImage(bm) " Move the old data one pixel to the left. gr.DrawImage(picGraph.Image, -1, 0) " Erase the right edge and draw guide lines. gr.DrawLine(Pens.Blue, wid - 1, 0, wid - 1, hgt - 1) For i As Integer = m_Ymid To picGraph.ClientSize.Height Step GRID_STEP gr.DrawLine(Pens.LightBlue, wid - 2, i, wid - 1, i) Next i For i As Integer = m_Ymid To 0 Step -GRID_STEP gr.DrawLine(Pens.LightBlue, wid - 2, i, wid - 1, i) Next i " Plot a new pixel. gr.DrawLine(Pens.White, wid - 2, old_y, wid - 1, new_y) " Display the result. picGraph.Image = bm picGraph.Refresh() gr.Dispose() End Sub " Add a status string to txtStatus. Private Delegate Sub AddStatusDelegate(ByVal txt As String) Private Sub AddStatus(ByVal txt As String) " See if we"re on the worker thread and thus " need to invoke the main UI thread. If Me.InvokeRequired Then " Make arguments for the delegate. Dim args As Object() = {txt} " Make the delegate. Dim add_status_delegate As AddStatusDelegate add_status_delegate = AddressOf AddStatus " Invoke the delegate on the main UI thread. Me.Invoke(add_status_delegate, args) " We"re done. Exit Sub End If txtStatus.Text &= vbCrLf & txt txtStatus.Select(txtStatus.Text.Length, 0) txtStatus.ScrollToCaret() End Sub " Display the current time. Private Sub tmrUpdateClock_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrUpdateClock.Tick lblTime.Text = Now.ToString("T") End Sub
End Class <Global.Microsoft.VisualBasic.rupilerServices.DesignerGenerated()> _ Partial Public Class Form1
Inherits System.Windows.Forms.Form "Form overrides dispose to clean up the component list. <System.Diagnostics.DebuggerNonUserCode()> _ Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing AndAlso components IsNot Nothing Then components.Dispose() End If MyBase.Dispose(disposing) End Sub "Required by the Windows Form Designer Private components As System.ruponentModel.IContainer "NOTE: The following procedure is required by the Windows Form Designer "It can be modified using the Windows Form Designer. "Do not modify it using the code editor. <System.Diagnostics.DebuggerStepThrough()> _ Private Sub InitializeComponent() Me.ruponents = New System.ruponentModel.Container Me.lblTime = New System.Windows.Forms.Label Me.txtStatus = New System.Windows.Forms.TextBox Me.picGraph = New System.Windows.Forms.PictureBox Me.btnGraph = New System.Windows.Forms.Button Me.tmrUpdateClock = New System.Windows.Forms.Timer(Me.ruponents) CType(Me.picGraph, System.ruponentModel.ISupportInitialize).BeginInit() Me.SuspendLayout() " "lblTime " Me.lblTime.Location = New System.Drawing.Point(208, 4) Me.lblTime.Name = "lblTime" Me.lblTime.Size = New System.Drawing.Size(80, 16) Me.lblTime.TabIndex = 7 Me.lblTime.Text = "Label1" Me.lblTime.TextAlign = System.Drawing.ContentAlignment.MiddleRight " "txtStatus " Me.txtStatus.Dock = System.Windows.Forms.DockStyle.Bottom Me.txtStatus.Location = New System.Drawing.Point(0, 38) Me.txtStatus.Multiline = True Me.txtStatus.Name = "txtStatus" Me.txtStatus.ReadOnly = True Me.txtStatus.ScrollBars = System.Windows.Forms.ScrollBars.Vertical Me.txtStatus.Size = New System.Drawing.Size(292, 85) Me.txtStatus.TabIndex = 6 Me.txtStatus.Text = "Ready" " "picGraph " Me.picGraph.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D Me.picGraph.Dock = System.Windows.Forms.DockStyle.Bottom Me.picGraph.Location = New System.Drawing.Point(0, 123) Me.picGraph.Name = "picGraph" Me.picGraph.Size = New System.Drawing.Size(292, 150) Me.picGraph.TabIndex = 5 Me.picGraph.TabStop = False " "btnGraph " Me.btnGraph.Location = New System.Drawing.Point(8, 4) Me.btnGraph.Name = "btnGraph" Me.btnGraph.Size = New System.Drawing.Size(48, 24) Me.btnGraph.TabIndex = 4 Me.btnGraph.Text = "Graph" " "tmrUpdateClock " Me.tmrUpdateClock.Enabled = True Me.tmrUpdateClock.Interval = 250 " "Form1 " Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.ClientSize = New System.Drawing.Size(292, 273) Me.Controls.Add(Me.lblTime) Me.Controls.Add(Me.txtStatus) Me.Controls.Add(Me.picGraph) Me.Controls.Add(Me.btnGraph) Me.Name = "Form1" Me.Text = "ThreadGraph" CType(Me.picGraph, System.ruponentModel.ISupportInitialize).EndInit() Me.ResumeLayout(False) Me.PerformLayout() End Sub Friend WithEvents lblTime As System.Windows.Forms.Label Friend WithEvents txtStatus As System.Windows.Forms.TextBox Friend WithEvents picGraph As System.Windows.Forms.PictureBox Friend WithEvents btnGraph As System.Windows.Forms.Button Friend WithEvents tmrUpdateClock As System.Windows.Forms.Timer
End Class</source>