tags:

views:

42

answers:

2

Here is my code

float cpuLoad = 0;

try{
    MessageBox.Show("Running");

    //CPU Load
    PerformanceCounter cpuCounter = new PerformanceCounter();
    cpuCounter.CategoryName = "Processor";
    cpuCounter.CounterName = "% Processor Time";
    cpuCounter.InstanceName = "_Total";

    MessageBox.Show("Performance Counter Created");

    cpuLoad = cpuCounter.NextValue();
    System.Threading.Thread.Sleep(1000);
    cpuLoad = cpuCounter.NextValue();

    MessageBox.Show("Clock Speed Gathered");

    //Remaining Code
}
catch(Exception ex) { MessageBox.Show(ex.Message); }

I have a try and catch around it and here is the exception it throws Input string was not in a correct format.

It gets through printing the first two Message Boxes, And then throws the exception.

Now here is what I cant get my head around, It works on Windows 7 Ultimate and Windows Server 2003, but on my colleagues Windows 7 Ultimate it Fails. It use to work on his computer, but suddenly its just stopped. The only difference in the near history has been that he has changed his Network.

Edit

Framework 4 was updated this morning. But I have it on my machine as well, so if it was the framework issue why is it not occurring on mine

Any ideas cause im lost

Tested on his machine

Its failing at the first cpuLoad = cpuCounter.NextValue()

Stack Trace

System.FormatException was unhandled
  Message="Input string was not in a correct format."
  Source="mscorlib"
  StackTrace:
       at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
       at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
       at System.Diagnostics.PerformanceCounterLib.GetStringTable(Boolean isHelp)
       at System.Diagnostics.PerformanceCounterLib.get_NameTable()
       at System.Diagnostics.PerformanceCounterLib.get_CategoryTable()
       at System.Diagnostics.PerformanceCounterLib.CounterExists(String category, String counter, Boolean& categoryExists)
       at System.Diagnostics.PerformanceCounterLib.CounterExists(String machine, String category, String counter)
       at System.Diagnostics.PerformanceCounter.Initialize()
       at System.Diagnostics.PerformanceCounter.NextSample()
       at System.Diagnostics.PerformanceCounter.NextValue()
       at CounterTest.Form1..ctor() in C:\Users\x\Documents\x\Applications & Software Development\C# Projects\CounterTest\CounterTest\Form1.cs:line 35
       at CounterTest.Program.Main() in C:\Users\x\Documents\x\Applications & Software Development\C# Projects\CounterTest\CounterTest\Program.cs:line 18
       at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: 
A: 

Any chance the (spoken/written) language on your co-worker's machine is set differently than yours, or that they fiddled with any of the localization settings on that machine? This is often a source of subtle bugs in .NET programs, especially when converting a string to/from different formats...

anonymous coward
Highley unlikley. But even so if that was the case. Why would a. Version that i compiled on my machine, fail when i copy the binary over?
Shahmir Javaid
+1  A: 

I think you may find that this is an issue with the performance counters not working correctly. If you open perfmon (Start>Run>Perfmon) and see an error like this.

---------------------------
Performance Monitor Control
---------------------------
Unable to add these counters:

\Memory\Available MBytes
\Memory\% Committed Bytes In Use
\Memory\Cache Faults/sec
\Memory\Cache Faults/sec
\PhysicalDisk(*)\% Idle Time
\PhysicalDisk(*)\Avg. Disk Queue Length
\Network Interface(*)\Bytes Total/sec

Then you will need to rebuild the counters from the PerfStringBackup.ini in the Windows\System32 folder. Follow this here for more info: http://drayblog.gotdns.com/index.php/2010/02/04/diagnostics-performancecounter-input-string-was-not-in-a-correct-format/.

aHunter