Announcement

Collapse
No announcement yet.

Benutzung von System.Threading.Timer

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Benutzung von System.Threading.Timer

    Hallo,

    ich benutze das .NET Compact Framework 2 (Pocket PC) und brauche einen Timer in einer Klasse, die allerdings ohne GUI arbeitet. Somit kann ich nur System.Threading.Timer benutzen, da ...Forms.Timer nicht anwendbar (kein GUI) und System.Timers nicht verfügbar (Compact Framework) ist.

    Nun ergibt sich aber folgendes Problem:
    Ich habe es nicht hinbekommen, den Timer in einer nicht-statischen Klasse zu verwenden, also z.B:


    TimerCallback timerDelegate = new TimerCallback(TimeoutCallback);

    Timer spTimer = new Timer(timerDelegate, null, Timeout.Infinite, Timeout.Infinite);

    private void TimeoutCallback(object state)
    {
    // handle timeout with access to nonstatic methods of a class
    }


    in einer Klasse


    public class SomeClass
    {
    ...
    }


    Dabei erhalte ich Fehlermeldungen der Form "A field initializer cannot reference the nonstatic field, method, or property...".

    Mache ich alles statisch mit dem Schlüsselwort static, so kann ich den Timer verwenden, allerdings kann ich dann keine Objekte der Klasse erstellen.

    Muss dieser Timer statisch verwendet werden oder gibt es einen Trick, ihn nicht-statisch zu benutzen? Leider konnte ich dazu nirgendwo etwas finden.

    Marco

  • #2
    Du darfst timerDelegate und spTimer erst im Constructor initialisieren.

    Wenn du die Initialisierung wie hier bei der Deklarierung vornimmst geht das nur mit statischen Werten als Parameter.

    Du benutzt aber TimeoutCallback und timerDelegate als Übergabeparameter deren konkrete Adresse für diese Instanz aber zu dem Zeitpunkt wo du sie benutzen willst noch gar nicht definiert sind.

    Comment


    • #3
      Super, Danke. Genau das war das Problem. Manchmal sieht man halt den Wald vor Bäumen nicht.

      Marco

      Comment

      Working...
      X