|
-
Feb 26th, 2011, 07:14 PM
#1
Thread Starter
Addicted Member
System.Diagnostics Problem
Hello again,I hope this time someone will reply me - my problem is that when I try to write a exe application for measuring the cpu usage every time I get the error:
Code:
A first chance exception of type 'System.InvalidOperationException' occurred in System.dll
or
Code:
A first chance exception of type 'System.FormatException' occurred in mscorlib.dll
The code I use is :
Code:
Imports System.Diagnostics
Dim oPerf1 As New PerformanceCounter
oPerf1.CategoryName = "Processor"
oPerf1.CounterName = "% Processor Time"
oPerf1.InstanceName = "0"
Dim I As Integer
For I = 0 To 100
SomeListBox.Items.Add (oPerf1.NextValue)
Threading.Thread.Sleep (20)
Next
And I get the above error,I searched a little in the internet but the most post were for database optimization and so on.
-
Feb 26th, 2011, 07:35 PM
#2
Hyperactive Member
Re: System.Diagnostics Problem
After a quick google search, This measures CPU usage:
Code:
Private m_PerformanceCounter As New _
System.Diagnostics.PerformanceCounter( _
"Processor", "% Processor Time", "_Total")
Private Sub btnClear_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnClear.Click
lstCpu.Items.Clear()
End Sub
Private Sub tmrCheckCpu_Tick(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles tmrCheckCpu.Tick
lstCpu.Items.Add(CInt(m_PerformanceCounter.NextValue()) _
& "%")
lstCpu.SelectedIndex = lstCpu.Items.Count - 1
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
tmrCheckCpu.Start()
End Sub
-
Feb 27th, 2011, 05:45 AM
#3
Thread Starter
Addicted Member
Re: System.Diagnostics Problem
But I get the above errors every time on this line:
Code:
System.Diagnostics.PerformanceCounter( _
"Processor", "% Processor Time", "_Total")
And to be more accurate I get the error line here:
"Processor"
"% Processor Time" - CounterName
"_Total"
And sometimes its say's me that the CounterName cant be found in the registry.
Last edited by mitko29; Feb 27th, 2011 at 05:51 AM.
-
Feb 27th, 2011, 07:43 AM
#4
Hyperactive Member
Re: System.Diagnostics Problem
have you still got this line in?
Code:
Imports System.Diagnostics
If so , comment or take it out. and then try
-
Feb 27th, 2011, 10:09 AM
#5
Thread Starter
Addicted Member
Re: System.Diagnostics Problem
 Originally Posted by crampz
have you still got this line in?
Code:
Imports System.Diagnostics
If so , comment or take it out. and then try
No change with it or without this code :
The error description I get from the program is :
Code:
An error occurred creating the form. See Exception.InnerException for details. The error is: Cannot load Counter Name data because an invalid index '' was read from the registry.
-
Feb 27th, 2011, 12:16 PM
#6
Thread Starter
Addicted Member
Re: System.Diagnostics Problem
Can someone told me from where this problem comes ?
-
Feb 27th, 2011, 01:19 PM
#7
Hyperactive Member
Re: System.Diagnostics Problem
Could this be any help?
http://stackoverflow.com/questions/1...-4-0-windows-7
It seems performance counters were corrupted on my system. Although I didn't follow this post exactly, it led me to the solution. Here is what I did:
In an command prompt with administrator/elevate privileges typed the following:
lodctr /?
Useful stuff in there...
Then typed:
lodctr /R
According to the docs from the prior step, this gets windows to rebuild the perf registry strings and info from scratch based on the current registry settings and backup INI files. I have a feeling this is what did the magic. However, next I noticed the .NET performance counters were not there anymore so based on this I typed the following to reload them:
lodctr "C:\Windows\Microsoft.NET\Framework64\v4.0.20506\corperfmonsymbols.ini"
Note that this path is for .NET Framework 4.0 on x64. You can imagine the path for other variations of the framework/platform. I'm guessing you should always load the counters from the highest version of the .NET framework that you have installed, but that is just a guess.
-
Feb 27th, 2011, 01:22 PM
#8
Junior Member
Re: System.Diagnostics Problem
Tested your code and for VB 2010 Expresss it seems to work without error after making one change. Your Imports statement needs to go before the class declaration and the rest of your code needs to go into some event - in my case I stuck it into the Form_Load event. Once I did that the listbox populated.
Code:
Imports System.Diagnostics
Public Class Form1
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
tmrCheckCPU.Start()
Dim oPerf1 As New PerformanceCounter
oPerf1.CategoryName = "Processor"
oPerf1.CounterName = "% Processor Time"
oPerf1.InstanceName = "0"
Dim I As Integer
For I = 0 To 100
SomeListBox.Items.Add(oPerf1.NextValue.ToString)
Threading.Thread.Sleep(20)
Next
End Sub
End Class
-
Feb 27th, 2011, 03:05 PM
#9
Thread Starter
Addicted Member
Re: System.Diagnostics Problem
 Originally Posted by crampz
Man you are a lifesaver 
But this is not working as I expect - my task manager is showing 9% but my program is showing only zero some help here ?
-
Feb 27th, 2011, 04:10 PM
#10
Hyperactive Member
Re: System.Diagnostics Problem
Using the code i posted and the code your posted it seems to have a little delay. i set the timer to 500 (half a second) and 100 milliseconds, for instance when the cpu read 17% the program would read 16% one reading after. e.g
Code:
10%
2% < Task manager read 17% here
16% < Program Read 16% Here
24%
If that makes sense
-
Feb 27th, 2011, 04:26 PM
#11
Thread Starter
Addicted Member
Re: System.Diagnostics Problem
 Originally Posted by crampz
Using the code i posted and the code your posted it seems to have a little delay. i set the timer to 500 (half a second) and 100 milliseconds, for instance when the cpu read 17% the program would read 16% one reading after. e.g
Code:
10%
2% < Task manager read 17% here
16% < Program Read 16% Here
24%
If that makes sense
Well I rewrite the code a little and now it's perfect:
Code:
Imports System.Threading
Public Class Form1
Private t_PerformanceCounter As New System.Diagnostics.PerformanceCounter("Processor", "% Processor Time", "_Total")
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim type As String = CInt(t_PerformanceCounter.NextValue()) & "%"
Label1.Text = type.ToString()
Threading.Thread.Sleep(20)
End Sub
End Class
And I set the Timer1.interval = 420 and now is reading exactly like the task manager.
Now the greater headache to rewrite this to vb6 .
Some help how to convert the system.diagnostic to vb6 some.component ?
God safe me
Last edited by mitko29; Feb 27th, 2011 at 04:45 PM.
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|