Control.Invoke() und Handles

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von YaPh1l.

    Control.Invoke() und Handles

    Hallo zusammen.
    Ich schreibe gerade eine kleine Applikation in VB 2008 (.NET 3.5 SP1).
    Dort nutze ich den System.Timers.Timer, um alle paar Sekunden Berechnungen durchzuführen.
    Anschließend aktualisiere ich mittels Control.Invoke() das UI, da Timers.Timer ja in einem separaten Thread läuft.
    Nun habe ich im Taskmanager beobachtet, dass bei jedem Elapsed die Anzahl der Handles steigt.
    In einem relativ großen Programm (eine Art Engine), das in C# geschrieben ist, habe ich das gleiche Muster (Timers.Timer + Invoke) und auch das selbe verhalten.
    Ich konnte das auf Invoke() isolieren, denn wenn ich BeginInvoke() nutze bleibt die Zahl der Handles konstant.
    Allerdings muss ich dann noch mit einer Schleife und Sleep() warten und das ist unschön.
    Weiß jemand woran das liegt? Und kann man das beheben oder muss ich bei BeginInvoke() bleiben?

    Viele Grüße, Phil.
    Und große Zahlen sind schlecht oder wie? Du solltest keine Zahlen beurteilen, die du nicht verstehst...
    Die Anzahl der Handles steigt durch die Threadsynchronisation. Sleep ist keine Threadsynchronisation und deswegen steigt die Anzahl da auch nicht an. Der Garbage Collector wird sich schon zur rechten Zeit darum bemühen.

    P.S.: Wenn schon, dann benutze statt Sleep ein ManualResetEvent oder AutoResetEvent aus System.Threading. Da steigt die Anzahl der Handles dann aber auch wieder. ;)