2016-04-11 10 views
2

Ich arbeite in Xamarin Formen und ich muss diese Assembly verwenden (mit System.Timers;), aber wenn ich es jetzt schreibe es findet keine Timer. Muss ich ein Paket hinzufügen?Was muss ich hinzufügen, um "using System.Timers" zu verwenden?

Ich möchte es so verwenden:

 var timer = new Timer (1000); 
     timer.Elapsed += OnTimerElapsed; 
     timer.Start(); 

public static void OnTimerElapsed(object o, ElapsedEventArgs e) 
{ 
//code 
} 
+0

können Sie den Code in Bezug auf das zeigen, worüber Sie sprechen, damit andere sehen können, was Sie gerade tun ..? auch eine Google-Suche auf 'C# Xamarin Ststem.Timer' – MethodMan

+0

ja geben Sie mir 1 Minute. – medvedo

+1

'System.Timers' ist auf' System.dll'. Aber wenn Sie auf einer PCL verwenden, kann es begrenzt sein und Sie müssen etwas anderes verwenden. https://msdn.microsoft.com/en-us/library/system.timers.timer(v=vs.110).aspx – BrunoLM

Antwort

4

Haben Sie die Timer-Klasse in der PCL-Projekt verwenden möchten? Wenn dies der Fall werden Sie Device.StartTimer verwenden müssen

Device.StartTimer (new TimeSpan (0, 0, 60),() => { 
    // do something every 60 seconds 
    return true; // runs again, or false to stop 
}); 
+0

aktualisiert meinen Code. es findet jetzt keinen Timer – medvedo

+1

@medvedo: Versuchen Sie, es im Portable Class Library-Projekt zu verwenden? – Giorgi

+0

Ich mache ein reguläres Xamarin-Formular-Projekt mit iOS und Android – medvedo

0

System.Timers kommt aus der System.dll Montage. Hier ist die Information von msdn

0

Abhängig vom PCL-Profil ist die Timer-Klasse nicht verfügbar. Ich benutze dieses Code-Schnipsel stattdessen:

delegate void TimerCallback(object state); 

    sealed class Timer : CancellationTokenSource, IDisposable 
    { 
     internal Timer(TimerCallback callback, object state, int dueTime, int period) 
     { 
      if (dueTime <= 0) 
       throw new ArgumentOutOfRangeException("dueTime", "Must be positive integer"); 

      if (period <= 0) 
       throw new ArgumentOutOfRangeException("period", "Must be positive integer"); 

      Task.Delay(dueTime, Token).ContinueWith(async (t, s) => 
       { 
        var tuple = (Tuple<TimerCallback, object>)s; 

        while (true) 
        { 
         if (IsCancellationRequested) 
          break; 
         Task.Run(() => tuple.Item1(tuple.Item2)); 
         await Task.Delay(period); 
        } 

       }, Tuple.Create(callback, state), CancellationToken.None, 
       TaskContinuationOptions.OnlyOnRanToCompletion, 
       TaskScheduler.Default); 
     } 

     public new void Dispose() 
     { 
      Cancel(); 
     } 
    } 
+0

Ich habe zuvor ein xamarin-Formular-Beispielprojekt verwendet, das system.timers verwendet, aber wenn ich versuche, ein Projekt neu zu erstellen und hinzuzufügen, kann ich es nicht finden, was seltsam ist, weil das Beispielprojekt ein Xamarinforms-Projekt ist – medvedo

Verwandte Themen