Laden...

Performance Counter "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."

Erstellt von kbert vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.034 Views
Thema geschlossen
K
kbert Themenstarter:in
5 Beiträge seit 2011
vor 13 Jahren
Performance Counter "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."

Guten Tag
Ich verwende einen Performace Counter um die CPU Auslastung anzuzeigen. Dies funktionierte Problemlos. Doch heute, obwohl ich nichts am Code verändert habe, bekomme ich diese Fehlermeldung:
System.NullReferenceException was unhandled Message=Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

Hier ist der Code:


  public void Counter()
        {
            counter = new PerformanceCounter();
            counter.CategoryName = "Processor";
            counter.CounterName = "% Processor Time";
            counter.InstanceName = "_Total";
        }

        public double GetCounter()
        {
            return counter.NextValue(); // hier ist der Fehler
        }

Ich hoffe ihr könnt mir helfen, denn ich weiß einfach nicht was falsch ist, da ich ja eigneltich am Code nichts verändert habe..
Schöne Grüße

1.029 Beiträge seit 2010
vor 13 Jahren

Hi,

kann es sein, dass "public void Counter()" eig. ein Konstruktor sein soll ?

Wenn ja: Lass das "void" weg - Andernfalls solltest du dafür sorgen, dass die
Funktion auch aufgerufen wird...

Gruß

Achim

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo kbert,

egal worum es geht. Das vorgehen bei einer NullReferenceException ist immer das gleiche und in der FAQ beschrieben: [FAQ] NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt [finden und beheben]. Im konkreten Fall wird vermutlich GetCounter aufgerufen, ohne dass vorher Counter aufgerufen wurde.

herbivore

K
kbert Themenstarter:in
5 Beiträge seit 2011
vor 13 Jahren

Alles klar, vielen dank das war die Lösung
Jedoch bekomme ich jetzt immer einmal 0 und einmal 100 zurück

public CpuUtilisation()
        {
            Counter();
            while (true)
            {
                Debug.WriteLine(GetCounter());
            }
        }

        public void Counter()
        {
            counter = new PerformanceCounter();
            counter.CategoryName = "Processor";
            counter.CounterName = "% Processor Time";
            counter.InstanceName = "_Total";
        }

        public double GetCounter()
        {
            return counter.NextValue();
        }

ergibt die ausgabe:
0
100
100
0
100
100
0
100
0
100
100
0
100
0
...
Weiß da jemand was falsch läuft?
lg

3.430 Beiträge seit 2007
vor 13 Jahren

Hallo kbert,

Weiß da jemand was falsch läuft?

Ich vermute mal dass du da die 100% / 0% stehen hast weil du den ganzen Thread blockierst.
Du gibst mit der while-Schleife mit voller Rechenleistung den Wert aus ohne Pause

Verwende für die Ausgabe einen Timer, dann sollte das Problem gelöst sein.
Generell siehe: [FAQ] Warum blockiert mein GUI?

Gruß
Michael

Thema geschlossen